記事がオリジナル記事の場合、転載の際は出典元を明記してください
この記事のブログアドレス:https://hpzwl.blog.csdn.net/article/details/131805718
国内キリンシステム関連開発
前: 「Kylin システム開発ノート (11): gdb を使用して国内 Kylin システムのクラッシュ例外を特定する、高度な位置コード行、特別なテスト デモ」次
: ご期待ください...
序文
地球規模の北斗測位端末の開発は、キリン システム上で行われます。北斗 GPS は測地座標を送信し、アプリケーションは緯度と経度の座標を必要とするため、変換する必要があります。変換には数式を使用できますが、プロジェクトにはShanhe SmartはWGを使用しています。
関連ブログ
「Kylin システム開発メモ (12): 国産 Kylin システムで GDAL ライブラリをコンパイル、基本開発環境と基本デモを構築」 「Qt +
GDAL開発メモ (1): Windows システム mingw32 で GDAL ライブラリをコンパイル、ビルド」開発環境と基盤のデモ》
測地座標の概要
概要
測地座標とは測地測量における基準楕円体の座標であり、地表点Pの位置は地球の経度L、地球の緯度B、地球の高さHで表されます。
原理
点が基準楕円体上にある場合、その点は測地経度と測地緯度によってのみ表されます。測地経度は、その点を通過する測地面と原点測地面 (グリニッジ天文台を通過する子午線面) の間の角度です。子午線開始面から数えて、東経0度から180度までを東経、西経0度から180度までを西経と定めることが定められています。測地緯度とは、その点を通る法線と赤道面とのなす角度であり、赤道面を起点として0°から90°までの北緯を北緯、それから90°までの南緯と定められています。 0°から90°を南緯といいます。測地高さは、基準楕円体の法線に沿った地上点からの距離です。
北京 54 座標系: BJZ54
北京 54 座標系 (BJZ54) は、北京 54 座標系が高麗人参測地座標系であることを意味します。地球上の点は、経度 L54、緯度 M54、測地高 H54 によって位置することができます。クラソフスキー楕円体に基づいています。ローカル調整後の結果の座標系。
- 長半径 a = 6378245m
- 準短軸 b = 6356863.0188m
- 第一離心率の二乗 e2 = 0.006693421622
- 平面度α=1/298.3
世界測地座標系: WGS-84
WGS-84 座標系は世界測地座標系であり、その座標原点は地球の中心にあり、WGS-84 楕円体 (1984 年世界測地座標系) が採用されています。
WGS-84 座標系は、米国国防総省によって開発および決定された測地座標系であり、プロトコル地球座標系です。
WGS-84 座標系の定義は次のとおりです。原点は地球の質量中心であり、空間直交座標系の Z 軸は BIH (1984.0) によって定義された地極 (CTP) の方向を指します。 、IAUとIUGGが共同で推奨する国際協定CIOの起源となっています。X 軸は、BIH と CTP 赤道によって定義された 0 度子午線の交点を指し、Y 軸と Z 軸は右手座標系を形成します。
WGS-84 楕円体は、第 17 回国際測地学地球物理学連合会議によって推奨された測定定数を採用し、一般的に使用される 2 つの基本的な幾何学的パラメーターを使用します。
- 長半径 a = 6378137m
- 準短軸 b = 6356752.3142m
- 第一離心率の二乗 e2 = 0.00669437999013
- 平面度α=1/298.257223563
国家測地座標系: CGCS2000
2000 年国家測地座標系は我が国の最新の国家測地座標系であり、英語名は China Geodetic Coordination System 2000、英語略称は CGCS2000 です。
2000 年国家測地座標系の原点は、海洋と大気を含む地球全体の質量の中心であり、2000 年国家測地座標系の Z 軸は、原点から紀元 2000.0 年の地球基準極の方向を指します。 、この時代の方向は国際時間事務局によって与えられます固定された時代は 1984.0 年の最初の方位計算であり、方位の時間発展により、地殻に対する地球の回転が残留しないことが保証されます。右手直交座標系を形成します。一般相対性理論の意味でスケールを使用します。
- 長半径 a = 6378137m
- 準短軸 b = 6356752.314m
- 第一離心率の二乗 e2 = 0.00669438002290
- 平面度α = 1/298.257222101
GDALライブラリ
概要
GDAL (Geospatial Data Abstraction Library) は、X/MIT ライセンス契約に基づくオープンソースのラスター空間データ変換ライブラリです。抽象データ モデルを利用して、サポートされているさまざまなファイル形式を表現します。データの変換と操作のためのコマンドライン ツールのコレクションも備えています。OGR は、ベクター データのサポートを提供する GDAL プロジェクトのフォークです。ESRI の ARCGIS 9.3、Google Earth、クロスプラットフォームの GRASS GIS システムなど、GDAL/OGR ライブラリを使用する有名な GIS 製品が数多くあります。GDAL/OGR ライブラリを使用すると、Linux ベースの地理空間データ管理システムは、ベクトル ファイル データとラスター ファイル データをサポートできます。
特徴
- GDAL は、Arc/Info ASCII Grid (asc)、GeoTiff (tiff)、Erdas Imagine Images (img)、ASCII DEM (dem) およびその他の形式を含む、さまざまなラスター データのサポートを提供します。
- GDAL は、抽象データ モデル (抽象データ モデル) を使用して、サポートするデータ形式を解析します。抽象データ モデルには、データセット、座標系、アフィン地理座標変換 (アフィン地理変換)、および測地制御点 (GCP) が含まれます。メタデータ、ラスターバンド、カラー テーブル、サブデータセット ドメイン、Image_Structure ドメイン、XML ドメイン。
- GDALMajorObject クラス: メタデータを持つオブジェクト。
- GDALDdataset クラス: 通常、ラスター ファイルから抽出された関連するラスター バンドとこれらのバンドのメタデータのコレクション。
- GDALDdataset は、すべてのラスター バンドの地理参照変換と座標系の定義も担当します。
- GDALDriver クラス: ファイル形式ドライバー クラス。GDAL は、ファイル形式を管理するために、サポートされているファイル形式ごとにこのクラスのエンティティを作成します。
- GDALDriverManager クラス: GDALDriver クラスの管理に使用されるファイル形式のドライバー管理クラス。
OGR アーキテクチャ
- Geometry クラス: Geometry (OGRGeometry およびその他のクラスを含む) は、OpenGIS のベクトル データ モデルをカプセル化し、いくつかの幾何学的操作、WKB (Well Knows Binary) 形式と WKT (Well Known Text) 形式間の相互変換、および空間参照系 (投影) を提供します。 。
- 空間参照クラス: OGRSpatialReference は、投影と測地基準の定義をカプセル化します。
- フィーチャ クラス: OGRFeature は完全なフィーチャの定義をカプセル化し、完全なフィーチャにはジオメトリとジオメトリの一連の属性が含まれます。
- フィーチャ定義クラス: OGRFeatureDefn は、フィーチャの属性、タイプ、名前、およびそのデフォルトの空間参照系をカプセル化します。OGRFeatureDefn オブジェクトは通常、レイヤーに対応します。
- レイヤー クラス: OGRLayer は、データ ソース クラス OGRDataSource 内の機能のレイヤーを表す抽象基本クラスです。
- データ ソース クラス: OGRDataSource は、OGRLayer オブジェクトを含むファイルまたはデータベースを表す抽象基本クラスです。
- Drivers クラス: OGRSFDriver は、サポートされている各ベクター ファイル形式に対応します。クラス OGRSFDriver は、クラス OGRSFDriverRegistrar によって登録および管理されます。
ダウンロードリンク
ホーム: https://gdal.org/download.html
バージョン 3.2.1 を選択
GDALをコンパイルする
ステップ 1: ダウンロードして解凍する
cd ~/work/src/
tar xvf gdal-3.2.1.tar.gz
ステップ 2: 構成する
cd gdal-3.2.1
./configure
エラー「configure: error: PROJ 6 シンボルが見つかりません」。PROJ6 をコンパイルする必要があります。
次の章「PROJ6 のコンパイル」を参照してください。コンパイルが完了したら、ここに戻って設定を続行してください。
cd gdal-3.2.1
./configure
次の方法で設定します。
Proj6もそうです。
ステップ 3: make をコンパイルする
make -j4
コンパイルを開始します。
この gdal ライブラリはコンパイルに時間がかかります。
コンパイルが完了したら、j なしで make を続行し、コンパイルが正しく渡されることを確認します。
ステップ 4: make install をインストールする
インストールするには管理者権限が必要です
sudo make install
ステップ 5: 新しいプロジェクトの基礎を導入する
これまでのインストールはすべてシステム パスにインストールされているため、ここでは最初にシステム パスのライブラリを紹介します。
ここでエラーが発生します:
次のように sudo ldconfig が必要で、ライブラリをシステムに再導入し、コンパイルして再度実行します。
バージョンは正常に出力されました。Linux であるため、いくつかの依存ライブラリがあります。この v1.0.0 バージョンはシステム インクルードとライブラリに依存しています (追記: ライブラリは後で再びモジュールに封入されますが、今回はそうではありません) 。
PROJ6 をコンパイルする
ステップ 1: ダウンロードして解凍する
ダウンロード アドレス: https://proj.org
バージョン 6.2.0 を選択して
ダウンロードし、仮想マシンにコピーします。
cd ~/workl/src
tar xfv proj-6.2.0.tar.gz
ステップ 2: 構成する
cd proj-6.2.0/
./configure
構成は成功しました:
ステップ 3: make をコンパイルする
make -j4
コンパイルを開始します。
コンパイルが完了したら、j なしで make を続行し、コンパイルが正しく渡されることを確認します。
ステップ 4: make install をインストールする
管理者権限を使用するには、次のようにします。管理者権限を使用しないと、インストールが失敗し、システム ディレクトリを作成できません。
sudo make install
テストしてください。これまでのところ、proj6 ライブラリはコンパイルされているので、ldconfig なしで信頼できます。
デモモジュラー
デモのソースコード
GDALManager.at
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
$$PWD/GDALManager.h
SOURCES += \
$$PWD/GDALManager.cpp
win32 {
}else {
DEFINES += LINUX
# GDAL系统安装的默认路径位/usr/local
# 系统库,头文件路径和库文件默认已包含
LIBS += -lgdal
}
win32 {
}else {
DEFINES += LINUX
# PROJ系统安装的默认路径位/usr/local
# 系统库,头文件路径和库文件默认已包含
LIBS += -lproj
}
GDALManager.h
#ifndef GDALMANAGER_H
#define GDALMANAGER_H
#include <QObject>
class GDALManager : public QObject
{
Q_OBJECT
public:
explicit GDALManager(QObject *parent = 0);
signals:
public:
static void testEnv(); // v1.0.0 测试环境
private:
};
#endif // GDALMANAGER_H
GDALManager.cpp
#include "GDALManager.h"
#include "gdal.h"
#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")
GDALManager::GDALManager(QObject *parent)
: QObject(parent)
{
// 注册所有驱动
GDALAllRegister();
}
void GDALManager::testEnv()
{
QString version = QString(GDALVersionInfo("RELEASE_NAME"));
LOG << version;
}
デモ プロジェクト テンプレート v1.0.0
前: 「Kylin システム開発ノート (11): gdb を使用して国内 Kylin システムのクラッシュ例外を特定する、高度な位置コード行、特別なテスト デモ」次
: ご期待ください...
記事がオリジナル記事の場合、転載の際は出典元を明記してください
この記事のブログアドレス:https://hpzwl.blog.csdn.net/article/details/131805718