QGIS二次開發01:環境配置-OSGeo4W鏡像

寫在前面:
本筆記根據多方資料整理而成,旨在為QGIS二次開發提供學習參考。內容僅供交流學習,歡迎共同探討。

一、關于QGIS

QGIS 是一個功能強大的桌面GIS軟件本身,為用戶提供了圖形化界面(GUI)來進行地圖制作、空間數據管理、空間分析、地理信息可視化等所有GIS任務。它依賴于OSGeo4W,在Windows系統上,官方推薦的QGIS安裝方式就是通過OSGeo4W安裝器。當你從QGIS官網下載Windows安裝程序時,你實際上下載的是OSGeo4W安裝器的一個精簡版,它會自動為你安裝QGIS和其最小所需的依賴項。

二、關于OSGeo4W

OSGeo4W 是一個用于分發開源地理信息系統(OSGeo)軟件的?安裝包管理系統,而 QGIS 是它管理的?最重要的軟件之一它的主要工作是下載、安裝、更新和管理一大批在Windows上運行的開源GIS軟件及其所有的依賴庫

“依賴庫”是什么??像QGIS這樣的復雜軟件并非完全獨立開發,它需要調用許多其他人寫好的基礎功能庫(例如用于處理GDAL地理數據、PROJ坐標投影、GEOS幾何運算等)。這些庫就是“依賴”。手動管理這些依賴非常復雜且容易出錯。

OSGeo4W 完美解決了這個問題。它提供了一個命令行和圖形化界面,讓你可以輕松地:選擇QGIS,它會自動把所有需要的依賴庫(GDAL, PROJ, GEOS等)都一并安裝好;你還可以通過它安裝GRASS GIS、SAGA GIS、gvSIG等 dozens 種其他GIS軟件和命令行工具;可以同時安裝QGIS的長期發布版(LTR)和最新開發版(Nightly),并輕松切換;用一個命令就能更新所有已安裝的軟件和庫到最新版本。

三、版本信息

Visual Studio:2022

QGIS(LTR):3.44.2

Qt:5.15.13

四、下載QGIS+QT

OSGeo4W官網下載地址:Download · QGIS Web Site

?

點擊下載,下載成功后如圖所示:

?

右擊以管理員身份運行(很重要!!!),進入安裝向導。

?

?

設置存儲路徑,筆者存儲在F:\OSGeo4W,注意如果剛剛沒有以管理員身份運行的話,這里無法選擇All Users。

?

?

?

選擇第一個網址,繼續點擊下一頁。

?

根據自己需要選擇不同版本:

  • 長期發行版(LTR),以qgis-ltr列出
  • 開發版(DEV),以qgis-dev列出
  • Desktop: 桌面版
  • Libs: 開發版
特性LTR (Long-Term Release) 長期支持版DEV (Development) / 常規版
定位穩定、可靠、用于生產環境新功能、前沿、用于測試和體驗
更新頻率低(約每一年發布一個新的大版本)高(約每四個月發布一個新的大版本)
支持周期(每個版本發布后,會提供至少一年的bug修復和安全更新)(通常只支持到下一個常規版發布)
穩定性非常高。經過充分測試,bug較少。較低。包含最新代碼,可能引入新的未知bug和API變動。
新功能較少。版本發布時的新功能在后續一年內基本凍結。非常多。第一時間包含所有最新功能和改進。
適用場景商業項目、科研項目、生產環境、系統集成、二次開發QGIS核心開發者、功能測試者、急于體驗最新功能的高級用戶

筆者選擇下載ltr版本,為了讓開發環境完整且正常工作,需要安裝以下兩個組件:

1. 從Desktop分類安裝:qgis-ltr?(運行時環境)

  • 這是什么??這是完整的 QGIS 桌面應用程序本身和所有它運行所需的運行時庫(DLL 文件)。

  • 為什么需要??當在 Visual Studio 中編譯完成二次開發程序后,要讓它能運行起來,就必須有這些 DLL 文件。您的程序不是獨立存在的,它需要調用這些 QGIS 的動態鏈接庫。

2. 從Libs分類安裝:qgis-ltr-devel (開發包)

  • 這是什么??這是開發包。它不包含可執行程序,只包含編譯所需的頭文件 (.h)?導入庫文件 (.lib) 和用于生成文檔的文件。

  • 為什么需要??當在 Visual Studio 中編寫代碼時,#include <qgsmapcanvas.h>?這樣的語句需要找到頭文件。當鏈接器工作時,它需要找到?qgis_core.lib?這樣的庫文件來生成你的.exe文件。這個包就提供了這些文件。

一個重要提示:當選擇安裝qgis-ltr-devel時,安裝器會自動標記并安裝所有它依賴的其他開發包(如gdal-devel,proj-devel,qt5-devel?等),這是最省心、最不容易出錯的方式。

安裝操作如下,輸入qgis-ltr,點擊Desktop下的Skip,點擊后會顯示版本號,注意不要點擊Enter鍵。

qgis-ltr這個包只包含了運行QGIS桌面軟件所必需的可執行文件(.exe)、動態鏈接庫(.dll)和資源文件。它的目的是讓用戶能夠打開并使用QGIS軟件進行繪圖和分析,而不是為了開發。要進行二次開發需要的是?頭文件(.h)、導入庫(.lib)?和用于調試的符號文件(.pdb),這些都在devel包里。繼續輸入qgis-ltr-devel,點擊Libs下的Skip,點擊后顯示版本號。

OSGeo4W中的QGIS及其所有依賴庫(GDAL、PROJ等)都是使用特定版本的Qt(通常是Qt 5.15.x)和特定編譯器(MSVC)編譯的。如果從Qt官網下載另一個版本的Qt,或者用不同編譯器(如MinGW)編譯的Qt,會產生二進制不兼容問題,導致鏈接失敗或運行時崩潰。

所以繼續在OSGeo4W上安裝Qt5開發包,繼續輸入qt5-devel,進行同樣的操作,點擊Libs下的Skip,點擊后顯示版本號,點擊下一頁安裝。
注意:Qt 版本一定是5.15.x,QGIS 3.x 系列與 Qt 6 不兼容。

安裝完成如下圖。

五、環境配置

打開Visual Studio 2022,點擊菜單欄的擴展—管理擴展,然后在右上角搜索框中輸入Qt,找到Qt Visual Studio Tools(通常由Qt Company提供),點擊“下載”。下載完成后,關閉所有VS窗口,安裝程序會自動運行,安裝完成后重新打開VS。

重新打開Visual Studio,點擊菜單欄的?擴展—Qt VS Tools—Options—Versions,在彈出的窗口中,點擊右側的Add 按鈕。添加一個新的Qt版本:

Name: 取一個容易識別的名字,例如QtOSGeo4W

Location: 瀏覽到OSGeo4W中的Qt目錄,筆者設置的地址是F:\OSGeo4W\apps\Qt5

點擊確定保存,現在VS就知道去哪里找到Qt的編譯工具和庫文件了。

在VS2022中創建QT Widegets項目,由于QGIS二次開發環境必須在Release環境下才能運行,因此將Debug刪去,只保留Release版本。其他默認下一步,成功創建項目。

?

?

設置項目屬性,右鍵項目,選擇屬性—C/C++—常規—附加包含目錄,添加下載的OSGeo4W的相關庫存儲路徑:

F:\OSGeo4W\apps\qgis-ltr\include

F:\OSGeo4W\apps\Qt5\include

F:\OSGeo4W\apps\Qt5\include\QtCore

F:\OSGeo4W\apps\Qt5\include\QtWidgets

F:\OSGeo4W\apps\Qt5\include\QtXml

F:\OSGeo4W\apps\Qt5\include\QtGui(根據自己設置的安裝路徑修改)

?

選擇鏈接器—常規—附加庫目錄,添加下載的OSGeo4W的相關庫存儲路徑:

F:\OSGeo4W\apps\Qt5\lib

F:\OSGeo4W\apps\qgis-ltr\lib(根據自己設置的安裝路徑修改)

?

選擇鏈接器—輸入—附加依賴項,添加以下內容:

qgis_core.lib

qgis_app.lib

qgis_gui.lib

Qt5Core.lib

Qt5Gui.lib

Qt5Widgets.lib

?

選擇C/C++—預處理器—預處理器定義,輸入:_USE_MATH_DEFINES?

?

選擇常規—C++語言標準,設置為 ISO C++17標準(/std:c++17)。

輸入以下示例代碼,注意修改成自己的路徑,圖層路徑不要出現中文:

#include "QGIS.h"//修改為自己的項目名
#include <QtWidgets/QApplication>
#include <qgsapplication.h>
#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsmaptoolpan.h>
#include <QDebug>
#include <QDir> // 添加這個頭文件int main(int argc, char* argv[])
{// 設置PROJ庫的環境變量 - 這是關鍵!// 根據您的OSGeo4W安裝路徑調整qputenv("PROJ_LIB", "F:/OSGeo4W64/share/proj");// 使用QgsApplication代替QApplication,并啟用GUIQgsApplication a(argc, argv, true);// 設置QGIS的安裝路徑(根據您的實際安裝路徑修改)QgsApplication::setPrefixPath("F:/OSGeo4W64/apps/qgis-ltr", true);// 初始化QGIS資源QgsApplication::initQgis();QMainWindow main_window;QgsMapCanvas map_canvas;// 創建柵格圖層,指定TIFF文件路徑QgsRasterLayer layer(R"(F:\GIS-TA\QGIS\QGIS\rs.tif)", "My Raster Layer");// 將圖層添加到畫布map_canvas.setLayers({ &layer });map_canvas.setExtent(layer.extent());map_canvas.refresh();QgsMapToolPan map_tool_pan(&map_canvas);map_canvas.setMapTool(&map_tool_pan);main_window.setCentralWidget(&map_canvas);main_window.resize(800, 600);main_window.show();int exit_code = a.exec();// 清理QGIS資源QgsApplication::exitQgis();return exit_code;
}

若出現如下的錯誤:

?

這是因為代碼(使用的某個第三方庫,比如QGIS或其依賴庫的代碼)使用了微軟標準庫擴展(STL Extensions)中的功能:stdext::make_checked_array_iterator?和相關的迭代器。這些功能(以?stdext::?開頭)是?微軟獨有的、非C++標準?的擴展。微軟警告說,這些擴展在未來的版本中會被移除,不再支持。
解決方案:

在“解決方案資源管理器”中,右鍵點擊你的項目 ->?“屬性”。在屬性頁中,導航到?“配置屬性” -> “C/C++” -> “預處理器”。點擊?“預處理器定義”?這一項右邊的下拉箭頭,選擇?“編輯...”,在彈出的對話框中,點擊右上角的?“新建”?圖標。添加宏定義:_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING

?


若出現類似以下的運行報錯,顯示找不到QGIS相關的dll,無法繼續執行代碼,則將相關dll文件放在項目.exe目錄下:

F:\OSGeo4W\apps\Qt5\bin

F:\OSGeo4W\bin

F:\OSGeo4W\apps\qgis-ltr\bin(根據自己設置的安裝路徑修改)

?

若出現如下報錯,則將下列文件夾復制到.exe目錄下:
F:\OSGeo4W\apps\Qt5\plugins\platforms(根據自己設置的安裝路徑修改)

?

運行成功如下圖所示:

歡迎交流!🌹🌹


參考內容:
QGIS二次開發環境配置(VS2019+QT5.12.2+QGIS3.26.3)

【QGIS】【OsGeo4w】安裝方法-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對接旅游行業安全需求:旅游安全急救實訓室的功能構建與育人目標

隨著我國旅游行業的快速發展&#xff0c;游客安全需求日益凸顯&#xff0c;安全應急處置能力已成為旅游服務人才的核心競爭力。旅游安全急救實訓室作為旅游服務與管理專業中的重要教學場所&#xff0c;其功能構建與育人目標影響人才培養質量與行業安全水平。點擊獲取方案 一、行…

Typora處理markdown文件【給.md文檔加水印】

①文件→偏好設置→外觀→打開主題文件夾②在打開的文件夾中放入水印圖像③右鍵點擊github.css文件后&#xff0c;點擊編輯&#xff0c;進入編輯頁面④將代碼塊中內容粘貼到文件最后 更多效果請自行探索 #write::before {content: "CSDN果子當夜宵&#xff1a;bigxie.blog…

基于單片機的六足機器人控制系統設計

基于單片機的六足機器人控制系統設計摘 要本設計主要是基于單片機的六足機器人控制系統設計&#xff0c;綜合分析六足機器人的結構、步態和控制算法&#xff0c;結合云端服務器、WIFI 技術、藍牙技術、語音識別技術和手勢識別技術進行多種控制模式的設計&#xff0c;并提出不同…

RK3568 Trust

文章目錄1、環境介紹2、前言3、ARM TrustZone3.1、什么是ARM TrustZone3.2、cpu特權等級3.3、ARM Trusted Firmware4、Rockchip 平臺的 Trust4.1、實現機制4.2、啟動流程4.3、生命周期4.4、Trust 編譯打包流程分析5、總結1、環境介紹 硬件&#xff1a;飛凌ok3568-c開發板 軟件…

C語言數據結構——詳細講解《二叉樹與堆的基本概念》

C語言數據結構——詳細講解《二叉樹與堆的基本概念》前言一、樹的基礎概念1.1 為什么需要樹&#xff1f;1.2 樹的定義與結構1.3 樹的核心術語1.3 樹的核心術語1.4 樹的表示方法&#xff08;孩子兄弟表示法&#xff09;結構定義為什么用孩子兄弟表示法&#xff1f;1.5 樹的實際應…

STAR-CCM+|雷諾數回顧

【1】引言 前序已經學習了K-epsilon湍流模型溯源的基礎知識&#xff0c;今天再學習一些更為基礎的知識&#xff0c;回顧一下雷諾數ReReRe。 【2】雷諾數定義 雷諾數公式為&#xff1a; ReρvDμRe\frac{\rho vD}{\mu}ReμρvD? 式中&#xff0c; ρ\rhoρ——流體密度&…

Java中的死鎖

鎖的合理使用能夠保證共享數據的安全性&#xff0c;但是 使用不當也會可能引起死鎖。1. 死鎖概念 死鎖是指兩個或兩個以上的線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力干涉那它們都將無法推進下去&#xff0c;如果系統資源充足&#xff0c;進程的資源請求…

基于STM32F103C8T6的智能家居健康環境監測系統

項目開發背景 隨著城市化進程加速和居民生活水平提升&#xff0c;人們對家居環境健康與安全的需求日益增強。現代住宅常因裝修材料、密閉空間及外部污染導致甲醛超標、PM2.5濃度升高、溫濕度失衡等問題&#xff0c;長期暴露此類環境中易引發呼吸道疾病、過敏反應等健康隱患。傳…

2025職場進階:B端產品經理必備的計算機專業技能精要

當前企業級服務市場競爭日益激烈&#xff0c;2025年的B端產品經理不僅需要深厚的行業認知&#xff0c;還必須具備扎實的計算機專業技能&#xff0c;才能設計出真正符合技術趨勢與業務需求的企業級產品。而其中&#xff0c;人工智能技術已經成為B端產品不可或缺的組成部分&#…

有效三角形的個數(數組單調性)

目錄 一&#xff1a;題目鏈接 二&#xff1a;題目思路 三&#xff1a;代碼實現 一&#xff1a;題目鏈接 題目的要求是找出當前數組能組成三角形三元組的個數。 二&#xff1a;題目思路 有一種暴力枚舉解法&#xff0c;利用三層 for 循環來一一枚舉三元組的情況&#xff0c;如…

Rust在醫療系統中的應用:安全、性能與合規性實踐(上)

Rust在醫療系統中的應用:安全、性能與合規性實踐 摘要 醫療系統對軟件安全與性能存在嚴苛雙重需求,既需抵御內存漏洞、數據加密風險等安全威脅(如歷史醫療設備因軟件問題召回案例所示),又需滿足電子健康記錄(EHR)系統、醫學影像處理等高并發數據場景的性能要求,同時需…

讀寫鎖 shared_mutex 共享互斥量介紹

文章目錄讀數據對數據沒有影響&#xff0c;為什么還需要shared_mutex1. 保證讀取數據的“一致性”和“時效性”2. 協調“讀”與“寫”的競爭關系總結好的&#xff0c;我們來詳細介紹 C17 中的 std::shared_mutex&#xff08;共享互斥量&#xff0c;俗稱讀寫鎖&#xff09;的使用…

Nestjs框架: 基于裝飾器與Guards的完成RBAC權限系統設計與實現

概述 在現代權限管理系統中&#xff0c;RBAC&#xff08;基于角色的訪問控制&#xff09;是廣泛采用的一種模型RBAC 核心思想是通過角色來管理用戶權限通過角色綁定用戶、資源和權限&#xff0c;實現細粒度的訪問控制為了實現這一目標&#xff0c;我們需要在數據庫中設計合理的…

機器學習如何精準預測高值

一、概念理解“機器學習對于高值的預測保守”&#xff0c;這是建模里很常見的現象&#xff0c;尤其在生態、氣候、遙感這類數據分布高度偏斜的場景。通常可以從以下幾個角度理解&#xff1a;1. 數據分布與樣本稀缺在訓練集里&#xff0c;高值樣本往往非常少&#xff0c;遠低于中…

蜂窩物聯網模組:智能門禁產品上的關鍵部件

隨著物聯網技術的快速發展&#xff0c;蜂窩物聯網模組正逐步成為智能門禁系統的關鍵通信組件。蜂窩模組憑借其廣覆蓋、高可靠性和低功耗特性&#xff0c;正從傳統門禁系統的補充角色轉變為智能門禁的核心通信組件&#xff0c;尤其在智慧社區、商業樓宇和政府機構等場景中展現出…

[光學原理與應用-417]:非線性光學 - 線性光學(不引發頻率的變化)與非線性光學(引發頻率變化)的異同

一、定義與物理機制&#xff1a;線性響應 vs 非線性響應線性光學定義&#xff1a;光與物質相互作用時&#xff0c;介質的極化強度與入射光電場強度呈線性關系&#xff08;P?0?χ(1)E&#xff09;&#xff0c;輸出光強與輸入光強成正比&#xff08;Iout?∝Iin?&#xff09;-…

深入探討AI在三大核心測試場景中的應用

隨著人工智能&#xff08;AI&#xff09;技術的迅猛發展&#xff0c;軟件測試領域正經歷深刻變革。傳統手動測試和基于規則的自動化測試已難以應對日益復雜的系統架構與海量用戶行為。AI測試通過引入機器學習、自然語言處理、計算機視覺等技術&#xff0c;顯著提升了測試效率、…

[linux倉庫]性能加速的隱形引擎:深度解析Linux文件IO中的緩沖區奧秘

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天來學習C語言緩沖區和內核緩存區的區別以及緩存類型。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c…

一、計算機的數據存儲

計算機的世界只有0和1。 1.1 進制 十進制整數->二進制整數&#xff1a;除2倒取余二進制->十進制&#xff1a;權值相加法 結論&#xff1a;1位8進制值 3位二進制值&#xff0c;1位十六進制值 4位二進制值 public class JinZhiDemo {public static void main(String[]…

SpringBoot集成XXL-JOB保姆教程

第一步&#xff1a; 下載xxl-job源碼到本地&#xff0c;地址如下&#xff1a; xxl-job: 一個分布式任務調度平臺&#xff0c;其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線&#xff0c;開箱即用。 第二步&#xff1a; 創建…