Qt+GDAL開発メモ(1): GDALライブラリのコンパイル、開発環境の構築、Windowsシステムのmingw32での基本デモ

記事がオリジナル記事の場合、転載の際は出典元を明記してください
この記事のブログアドレス:https://hpzwl.blog.csdn.net/article/details/131931309

Red Fatty Network Technology Blog Encyclopedia: 開発技術集(Qt実践技術、Raspberry Pi、3D、OpenCV、OpenGL、ffmpeg、OSG、シングルチップマイコン、ソフトウェアとハ​​ードウェアの組み合わせなどを含む)を随時更新中...

Qt開発コラム:スリーパーティライブラリ開発技術

前: これ以上ありません
次: 乞うご期待...


序文

  北斗全球測位端末の開発はキリンシステム上で行われており、校正を容易にするためにデバッグツールはWindowsバージョンである必要があり、北斗GPSは測地座標を送信し、アプリケーションは緯度と経度の座標を必要とするため、変換するには数式を使用できますが、以前は山が必要でした。彼はプロジェクトに WG を賢明に使用し、最終的に変換に GDAL ライブラリを選択しました。

知らせ

  リーダーが mingw32 を必要としない場合は、mingw32 バージョンの dgal を使用しないことをお勧めします。コンパイルのプロセスは非常に複雑です。


関連ブログ

  「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 を選択


MSYS2コンパイル環境を準備する

  (ここで、最初に mysy1.0 を使用した場合、システム列挙が不明なので、msys2 に変更します)。
  (ここでは、msys2 が数日間穴に足を踏み入れており、依存ライブラリは glibc、libtool、pkg-config などの問題に依存しており、相互に行き来しています。最終的にコンパイルできた後、システム ロゴを表示することはできません)最後に認識されました。まだ主張しているので、もう一度変更しました。msys642をダウンロードし、もう一度実行し、すべてのパスを削除し、msys642に直接インストールし、パスプレフィックスを使用して設定を開始し、抽出したライブラリファイルをコンパイルしてインストールします)これは、Windows 上で Linux ライブラリがコンパイルされる環境です
  。
  自分でダウンロードして解凍します。
  ここに画像の説明を挿入

  「msys2.bat」をクリックして開始します。
  ここに画像の説明を挿入

  ここでは、Qt5.9.3 の mingw32 開発を使用する必要があるため、Qt の mingw32 コンパイラーをこのルート ディレクトリにコピーして、修飾された msys 環境に導入できるようにする必要があります。
  ここに画像の説明を挿入

  それから:
  ここに画像の説明を挿入

  パスは次の場所にインポートされます。

export PATH=$PATH:/mingw530_32/bin

  ここに画像の説明を挿入


GDALをコンパイルする

ステップ 1: ダウンロードして解凍する

export PATH=$PATH:/mingw530_32/bin
cd /home/21497/compile
mkdir gdal

  ここに画像の説明を挿入

  次に、gdal パッケージを msys のメイン ディレクトリにコピーします。
  ここに画像の説明を挿入

cd gdal
tar xvf gdal-3.2.1.tar.gz
ls -l

  ここに画像の説明を挿入

ステップ 2: 構成する

  ここでは、指定されたディレクトリにライブラリを生成するために prefix パラメータが設定されています。

cd /home/21497/compile/gdal/gdal-3.2.1
./configure --prefix=/home/21497/compile/gdal/install
./configure --prefix=/home/21497/compile/gdal/install --without-libtool

  ここに画像の説明を挿入

  エラー「configure: error: PROJ 6 シンボルが見つかりません」。PROJ6 をコンパイルする必要があります。
  ここに画像の説明を挿入

  次の章「PROJ6 のコンパイル」を参照してください。コンパイルが完了したら、ここに戻って設定を続行してください。

cd gdal-3.2.1
./configure

  それでもエラーが報告されますが、ヘッダー ファイルとライブラリ ファイルが既に存在することがわかり、次の強制を開始します。
  ここに画像の説明を挿入

  ここに画像の説明を挿入

  ヘッダー ファイルがまだ見つかりません。別のファイルを次に示します。
  ここに画像の説明を挿入

  十分ではありません。彼のためにコメントアウトするだけです。
  ここに画像の説明を挿入

  コメントの読み取りを直接強制し、HAVA_PROJ_H の定義を強制します (すべてのフォルダーが配置され、テストも強制的にシールドされるため、合格しません。ソース コード メソッドの最終結果は次のとおりです:
  ここに画像の説明を挿入

  次の方法で設定します。
  ここに画像の説明を挿入

  Proj6もそうです。

ステップ 3: mak をコンパイルする

  (追伸: このライブラリは、mingw32-make でエラーや例外が発生しても make は通りますが、基本的に前者が通らない場合は make を使います。とにかくコンパイルすると純粋な gcc になり、gcc が導入されます。 Qt5.9.3のmingw32のgcc)

make -j4

  コンパイルを開始すると、この gdal ライブラリがコンパイルされますが、時間がかかり、エラーが発生します。
  ここに画像の説明を挿入

  この msys642 にはヘッダー ファイルにいくつかの問題があります。古い方法では、すべてのヘッダーをこの「geo_keyp.h」フォルダーに直接コピーできるため、理論的には次のことが可能です。
  ここに画像の説明を挿入

  コンパイル後、実際にパスしました (PS: なぜ msys642 はヘッダー ファイルのパスを独自にロードせず、追加の環境変数は機能しないので、注意深く調べません)。コンパイルを続行します。

make

  ここに画像の説明を挿入

  コンパイル後:
  ここに画像の説明を挿入

  j を使用せずに make を続行し、正しくコンパイルされたことを確認します。
  ここに画像の説明を挿入

  ここに画像の説明を挿入

ステップ 4: make install をインストールする

  インストール

make install

  ここに画像の説明を挿入

  ここに画像の説明を挿入

ステップ 5: コンパイルされたライブラリをプロジェクトにインポートする

  (追記: ここのプロジェクトは Kirin システム v1.0.0 に基づいており、v1.1.0 にアップグレードされ、Windows プラットフォーム Qt5.9.3 の mingw32 バージョンと統合されています) 以前のインストールはすべて
  システム パスにインストールされているため、ライブラリシステム パスの最初の説明はここで行われます。
  ここに画像の説明を挿入

  ここまでは成功です。


PROJ6 をコンパイルする

ステップ 1: ダウンロードして解凍する

  ダウンロード アドレス: https://proj.orgダウンロードする
  バージョン 6.2.0 を選択し
  、MSYS2 にコピーします。

cd /home/21497/compile
mkdir proj
cd proj

  

tar xfv proj-6.2.0.tar.gz

  

ステップ 2: 構成する

  ここでは、指定されたディレクトリにライブラリを生成するために prefix パラメータが設定されています。

cd /home/21497/compile/proj/proj-6.2.0/
./configure --prefix=/home/21497/compile/proj/install
./configure --without-libtool

  
  構成エラー「SQLITE3」 (以下の図に示すように):
  
  次の章「SQLITE3 のコンパイル」を参照してください。コンパイルが完了したら、ここに戻って構成を続行してください:

cd /home/21497/compile/proj/proj-6.2.0/

  現時点では、コンパイル時にまだエラーが発生します。このエラーは、pkgconfig の問題である可能性があります。「compile pkgconfig」をインストールし、mingw642 に変更して解決してください。続行:
  

ステップ 3: make をコンパイルする

make -j4

  コンパイルを開始します。
  ここに画像の説明を挿入

  ここに画像の説明を挿入

  ここでは、ヘッダー ファイルが見つかりません。
  ここに画像の説明を挿入

  ヘッダー ファイル パスを追加してもエラーが報告される場合は、直接強制して続行します。
  ここに画像の説明を挿入

  ここに画像の説明を挿入

  ライブラリ パスを追加してもエラーが報告される場合は、直接強制して続行します。
  ここに画像の説明を挿入

  最後に過去をまとめました:
  ここに画像の説明を挿入

  ここに画像の説明を挿入

  「gdal」ライブラリに戻ります。

ステップ 4: make install をインストールする

  管理者権限を使用するには、次のようにします。管理者権限を使用しないと、インストールが失敗し、システム ディレクトリを作成できません。

sudo make install

  テストしてください。これまでのところ、proj6 ライブラリはコンパイルされているので、ldconfig なしで信頼できます。


SQLITE3のコンパイル

ステップ 1: ダウンロードして解凍する

  https://www.sqlite.org/download.html
  ここに画像の説明を挿入

  ここに画像の説明を挿入

tar xvf sqlite-autoconf-3420000.tar.gz

  ここに画像の説明を挿入

ステップ 2: 構成する

  ここでは、指定されたディレクトリにライブラリを生成するために prefix パラメータが設定されています。

cd /home/21497/compile/sqlite3/sqlite-autoconf-3420000
./configure --prefix=/home/21497/compile/sqlite3/install

  ここに画像の説明を挿入

  構成エラー:
  ここに画像の説明を挿入

  (追記: すべてにおいてパニックにならないでください。ゆっくり目を開けてエラーを 1 行ずつ確認してください)
  設定を変更します。

./configure --prefix=/home/21497/compile/sqlite3/install --disable-dependency-tracking

  次に、設定を続けます。
  ここに画像の説明を挿入

  構成は成功しました:
  ここに画像の説明を挿入

ステップ 3: make をコンパイルする

  ここに画像の説明を挿入

  ここでコンパイルすると libtool でエラーが発生し、解決策がないため、sqlite を 1 バージョン逆にすると成功します。手順を繰り返します。
  ここに画像の説明を挿入

cd sqlite-snapshot-202101271915
./configure --prefix=/home/21497/compile/sqlite3/install
mingw32-make.exe -j4

  ここに画像の説明を挿入
  ここに画像の説明を挿入

ステップ 4: make install をインストールする

mingw32-make install

  以下に示すように、失敗しました。
  ここに画像の説明を挿入

  make が異なるため、Makefile を直接変更します。
  ここに画像の説明を挿入

  次のものを渡すことができます。
  ここに画像の説明を挿入

ステップ 5: コンパイルが成功したことを確認する

  ここに画像の説明を挿入

  上記はパスを抽出するものですが、それに依存するライブラリのコンパイルに問題があります。
  ここに画像の説明を挿入

  ワンサイズですべてに対応するには、パスを使用せずに直接再構成し、msys にデプロイします。

cd /home/21497/compile/sqlite3/sqlite-snapshot-202101271915/
./configure
mingw32-make.exe
mingw32-make install

  (忘れずに Makefile の CC を mingw32-make に変更してインストールしてください)
  ここに画像の説明を挿入

  msys642 と 3.42 を変更し、make を使用してください (mingw32-make は使用しません)。
  ここに画像の説明を挿入
  ここに画像の説明を挿入
  ここに画像の説明を挿入


pkgconfig をコンパイルします (廃止されましたが、ステップは保持します)

ステップ 1: ダウンロードして解凍する

  ダウンロードアドレス: https://www.freedesktop.org/wiki/Software/pkg-config/
  ここに画像の説明を挿入

tar xvf pkgconfig-0.6.0.tar.gz

  ここに画像の説明を挿入

ステップ 2: 構成する

cd pkgconfig-0.6.0/
./configure

  ここに画像の説明を挿入

  ここに画像の説明を挿入

  バージョン 0.29 の場合:
  ここに画像の説明を挿入

  構成を変更します。

./configure –with-internal-glib

  色々なエラーが出ますが解決策はなく、その後mingw32-make設定proj6ではこのエラーは発生しなくなりました。


終わり

  この記事では、問題を解決するために多くの試みが行われています。最終コンパイル後、解決プロセスには約 3 日かかるため、モジュールを導入する必要はありません。さまざまな msys 環境、さまざまなオープン ソース ライブラリのバージョンでの試行錯誤、およびパスのソースコード調整、やっとこの記事が終わりました。
  リーダーが mingw32 を必要としない場合は、mingw32 バージョンの dgal を使用しないことをお勧めします。


前: これ以上ありません
次: 乞うご期待...


記事がオリジナル記事の場合、転載の際は出典元を明記してください
この記事のブログアドレス:https://hpzwl.blog.csdn.net/article/details/131931309

おすすめ

転載: blog.csdn.net/qq21497936/article/details/131931309