qt で QGIS を使用して二次開発を実現し、shp 形式のマップをインポートする (MSVC2019_64bit+qt5.15+qgis)

qt 開発プロセスでは、レイヤー マップをカスタム形式でインポートする必要がある場合があります。その後、これらのデータを qgis にインポートし、shp 形式のファイルとしてエクスポートし、qgis ソース コードをダウンロードして、qt プロジェクトで環境変数を構成できます。 、qgis関連のヘッダーファイルをインポートしてから、shpデータ形式でマップを導入します。

qgis処理データ

QGISのインストール

QGISのインストール

QGISインポートデータ

ここに画像の説明を挿入
次に、保存して [レイヤー] -> [名前を付けて保存] をクリックして、shp 形式のファイルとしてエクスポートします。
ここに画像の説明を挿入

QTでのQGIS二次開発(コンパイル済みがリリース版)

QGisの二次開発についてはQtCreatorを参照(1)

VS2019+QT5.15.2+QGIS二次開発環境にQGISをインストールする方法 を参考にQGISソースパッケージをインストールしました。インストール後、pro ファイルと cpp ファイルが 1 つだけ作成されます。

プログラム

  • main.cpp
#include <QMainWindow>
#include <qgsapplication.h>
#include "qgsproject.h"
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QGridLayout>
//QGIS
#include "qgsproject.h"
#include <qgsmaptooldigitizefeature.h>
#include <qgsadvanceddigitizingdockwidget.h>
#include <qgssymbol.h>
#include <qgsmessagebar.h>
//QGIS include
#include "qgsmapcanvas.h"
#include "qgsmaplayer.h"
#include  <qgsmaptoolcapture.h>
#include<QMouseEvent>
#include <QMainWindow>
int main(int argc, char *argv[])
{
    
    
    QgsApplication app(argc, argv, true);
    QgsApplication::initQgis();

    // 加载.shp文件,地址为shp格式文件存放地址
    QString filePath = "C:/xxx/xxx.shp";
    QgsVectorLayer* layer = new QgsVectorLayer(filePath, "Layer Name", "ogr");

    if (!layer->isValid())
    {
    
    
        qDebug() <<"error";
        return -1;
    }

    // 添加图层到地图窗口
    QgsProject::instance()->addMapLayer(layer);

    // 显示地图窗口
    QgsMapCanvas* canvas = new QgsMapCanvas();
    canvas->setCanvasColor(QColor(255, 255, 255));
    canvas->setExtent(layer->extent());
    canvas->enableAntiAliasing(true);
    //canvas->setMapUnits(QgsUnitTypes::Meters);
    canvas->setLayers(QgsProject::instance()->mapLayers().values());
    canvas->show();

    // 进入Qt事件循环
    return app.exec();
}
  • 。プロ
QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += _USE_MATH_DEFINES
# 这里需要改成你的OSGeo4W的地址
SOURCES += \
    main.cpp
INCLUDEPATH += "D:\OSGeo4W\include"
INCLUDEPATH +="D:\OSGeo4W\apps\qgis-ltr\include"
INCLUDEPATH +="D:\OSGeo4W\apps\Qt5\include"
LIBS += -L"D:\OSGeo4W\apps\qgis-ltr\lib" -lqgis_core -lqgis_gui

unix{
    
    
DEFINES += CORE_EXPORT=
DEFINES += GUI_EXPORT=
}
!unix{
    
    
DEFINES += CORE_EXPORT=__declspec(dllimport)
DEFINES += GUI_EXPORT=__declspec(dllimport)
}
# Default rules for deployment.
qnx: target.path = /tmp/$${
    
    TARGET}/bin
else: unix:!android: target.path = /opt/$${
    
    TARGET}/bin
!isEmpty(target.path): INSTALLS += target

環境構成

プロジェクト -> ビルド環境

含む

ここに画像の説明を挿入

リブ

ここに画像の説明を挿入

ここに画像の説明を挿入

PROJ_LIB

PROJ_LIB という新しい変数を追加します。
ここに画像の説明を挿入

dll およびその他の関連ライブラリ ファイルをコピーする

このステップは非常に重要です!
リリース バージョンでコンパイルすると、 release というコンパイル済みディレクトリが作成されますbuid-xxx(你的项目名称)-Desktop_Qt_5_15_2_MSVC2019_64bit-Release。このディレクトリには release フォルダが含まれています。このフォルダに入り、このフォルダを一時的にexe ディレクトリと呼びます。

OSGeo4W ソース パッケージは D ドライブにインストールされています

  1. D:\OSGeo4W\apps\Qt5\bin ディレクトリ内のすべての DLL を exe ディレクトリにコピーします。約300MB。QT 関連のライブラリ。
  2. D:\OSGeo4W\apps\Qt5\plugins ディレクトリの下の platforms ディレクトリを exe ディレクトリの下の plugins ディレクトリにコピーします。Qtプラグインライブラリ。
  3. D:\OSGeo4W\apps\qgis-ltr\bin ディレクトリ内のすべてのファイルを exe ディレクトリにコピーします。Qgis関連ライブラリ
  4. D:\OSGeo4W\bin ディレクトリ内のすべての dll ファイルと gdalplugins ディレクトリを exe ディレクトリにコピーします。GDAL、OSGEO 関連のライブラリ。

gdalplugins を見つける方法は、フォルダーの右上隅で検索します。そのうちの 1 つを選択してください。
ここに画像の説明を挿入

  1. D:\OSGeo4W\apps\qgis-ltr\plugins ディレクトリ内のすべてのファイルを、exe と同じレベルの plugins ディレクトリに置きます。このディレクトリ内の DLL は、さまざまなファイルのドライバーです。これらの DLL が見つからない場合、ファイルは開けられません。Qgisプラグインライブラリ。
  2. D:\OSGeo4W\apps\gdal\share 内の gdal ディレクトリを、exe と同じレベルの共有ディレクトリにコピーします。このディレクトリには GDAL_DATA 内の補助ファイルが含まれており、コード内で GDAL_DATA の環境変数をこのディレクトリに登録する必要があります。
  3. exe ディレクトリに新しい qt.conf ファイルを作成し、次の内容を入力します。ここに画像の説明を挿入
  4. 上記の設定が完了したら、Release モードで exe を再生成します。
  5. exe を実行すると、ウィンドウが表示されます。

おすすめ

転載: blog.csdn.net/qaaaaaaz/article/details/130781952