当前位置:   article > 正文

Windows 10下编译安装QGIS_qgis离线下载编译

qgis离线下载编译

QGIS是一套跨平台的开源GIS(Geographic Information System)软件。

对于Windows下编译QGIS,QGIS提供了Cygwin、MinGW、OSGeo4W等脚本,但是OSGeo4W仅支持VS 2015。本文详述在Windows 10下使用VS2019编译安装QGIS的操作流程。

注1:随系统环境不同,QGIS编译方法可能略有不同。

注2:限于笔者认知水平与研究深度,难免有不当之处,敬请谅解。

零、系统环境

操作系统:Windows 10

编译器:Visutal Studio Community 2019

CMake:CMake 3.15.0

Git: Git 2.9.3.2 64 bit

NSIS: NSIS 3.06.1

一、获取代码

在”D:\YouQuan\CaeFrameworks\QGIS”下创建如下目录,

 从GitHub下载代码 ,

  1. git clone https://github.com/qgis/QGIS.git
  2. git checkout -b final-3_22_0 final-3_22_0

二、安装依赖

2.1 Cygwin安装依赖包

首先下载安装Cygwin,选择下载临时目录为”C:\Users\Administrator\AppData\Local\Temp”

然后安装以下依赖包

依赖包

版本

说明

flex

2.6.4-2

bison

3.8.2-1

2.2 OSGeo4W安装依赖包

首先下载安装OSGeo4W。由于武汉大学等国内镜像源提供的依赖包版本滞后,因此此处仍旧使用国外镜像源。

镜像源

依赖包版本

OSGeo Download Server

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

Open Source Lab

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

www.norbit.de

qgis-dev-deps 3.23.0-178-9ae9d40d14-1

武汉大学镜像

3.13.0-1


下载安装以下依赖包

依赖包

版本

说明

qgis-dev-deps3.23.0-178-9ae9d40d14-1

注意:由于网络状状态不稳定,OSGeo4w可能不能下载全部的依赖包,导致部分依赖包丢失,可以重复几次下载即可。 

2.3 安装Ninja

下载ninja-win.zip,解压得到ninja.exe。ninja.exe拷贝到C:\OSGeo4W\bin\目录。

依赖包

版本

说明

ninja

1.7.2

三、构建项目

为了配置编译环境,需要设置OSGeo4W、python、Qt等相关环境变量。

新建“C:\OSGeo4W\bin\py3_env.bat”,添加以下内容,

  1. SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39
  2. SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts
  3. PATH %PYTHONPATH%;%PATH%

 新建“C:\OSGeo4W\bin\qt5_env.bat”,添加以下内容,

  1. @echo off
  2. path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH%
  3. set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins
  4. set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5
  5. set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin
  6. set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins
  7. set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib
  8. set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations
  9. set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/include
  10. set O4W_QT_DOC=%OSGEO4W_ROOT:\=/%/apps/Qt5/doc

新建“C:\OSGeo4W\bin\qt5.conf”,添加以下内容,

  1. [Paths]
  2. Prefix=$(O4W_QT_PREFIX)
  3. Binaries=$(O4W_QT_BINARIES)
  4. Plugins=$(O4W_QT_PLUGINS)
  5. Libraries=$(O4W_QT_LIBRARIES)
  6. Translations=$(O4W_QT_TRANSLATIONS)
  7. Headers=$(O4W_QT_HEADERS)
  8. Documentation=$(O4W_QT_DOC)

 新建“D:\YouQuan\CaeFrameworks\QGIS\qgis-dev.bat”,添加以下内容,

  1. @echo off
  2. set VS16COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\
  3. call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
  4. set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include
  5. set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib
  6. rem OSGeo4W directory
  7. set OSGEO4W_ROOT=C:\OSGeo4W
  8. call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
  9. call "%OSGEO4W_ROOT%\bin\py3_env.bat"
  10. call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
  11. set O4W_ROOT=%OSGEO4W_ROOT:\=/%
  12. set LIB_DIR=%O4W_ROOT%
  13. path %PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin;
  14. path %PATH%;C:\Program Files\CMake\bin;C:\cygwin64\bin
  15. @set GRASS_PREFIX=C:\OSGeo4W\apps\grass\grass78
  16. @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
  17. @set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
  18. set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
  19. set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
  20. @cmd

然后在命令行中中启动CMake,

cmake-gui

按照下表配置CMake,

Where is the source code

D:/YouQuan/CaeFrameworks/QGIS/QGIS

Where to build the binaries

D:/YouQuan/CaeFrameworks/QGIS/BUILD

CMAKE_INSTALL_PREFIX

D:/YouQuan/CaeFrameworks/QGIS/INSTALL

WITH_BINDINGSFALSE

BUILD_TESTING

FALSE

ENABLE_TESTS

FALSE

然后构建并生成VS项目qgis.sln。

四、编译安装

CMake构建成功之后,直接在CMake中打开qgis.sln,切换到”Release”配置模式,构建“ALL_BUILD”项目,完成QGIS的编译;构建“INSTALL”项目完成QGIS的安装。

Ref. from QGIS INSTALL

Change Solution Configuration from Debug to RelWithDebInfo (Release with Debug Info) or Release before you build QGIS using the ALL_BUILD target (otherwise you need debug libraries that are not included).

注意:由于目前OSG4W提供的qgis-dev-deps对于部分依赖包仅提供Release版本的库文件,可能会造成Debug配置模块编译报错

设置qgis项目为启动项目,运行启动qgis,验证QGIS编译成功。

五、制作安装包

5.1 安装工具包

QGIS使用NSIS来制作安装包,因此,需要下载安装NSIS等工具。

工具

版本

说明

perl5.30.3-1通过Cygwin安装
wget1.21.1-1通过Cygwin安装
NSIS3.06.1下载NSIS 

5.2 生成安装包

首先,将"D:/YouQuan/CaeFrameworks/QGIS/INSTALL"目录下的文件拷贝到"D:/YouQuan/CaeFrameworks/QGIS/QGIS/ms-windows/osgeo4w/unpacked/apps/qgis/"目录中。

然后,在OSGeo4W中,运行quickpackage.sh脚本即可,

  1. cd D:\YouQuan\CaeFrameworks\QGIS\QGIS\ms-windows\
  2. ./quickpackage.sh

附录A:常见问题

Q1. CMake构建项目时,提示找不到”pyuic5”

A1.修改”D:\YouQuan\CaeFrameworks\QGIS\QGIS\cmake\PyQtMacros.cmake”

Q2. 编译QGIS时,访问QgsField::ConfigurationFlags::None等枚举类型报错。

 A2. 修改moc_qgsfields.cpp,

  1. static const uint qt_meta_data_QgsField[] = {
  2. // content:
  3. 7, // revision
  4. 0, // classname
  5. 0, 0, // classinfo
  6. 0, 0, // methods
  7. 12, 14, // properties
  8. 2, 50, // enums/sets
  9. 0, 0, // constructors
  10. 4, // flags
  11. 0, // signalCount
  12. // properties: name, type, flags
  13. 1, QMetaType::Bool, 0x00095001,
  14. 2, QMetaType::Bool, 0x00095001,
  15. 3, QMetaType::Int, 0x00095103,
  16. 4, QMetaType::Int, 0x00095103,
  17. 5, 0x80000000 | 6, 0x0009510b,
  18. 7, QMetaType::QString, 0x00095103,
  19. 8, QMetaType::QString, 0x00095103,
  20. 9, QMetaType::QString, 0x00095103,
  21. 10, 0x80000000 | 11, 0x0009510b,
  22. 12, 0x80000000 | 13, 0x0009510b,
  23. 14, 0x80000000 | 15, 0x0009510b,
  24. 16, QMetaType::Bool, 0x00095003,
  25. // enums: name, flags, count, data
  26. 17, 0x2, 4, 58,
  27. 15, 0x3, 4, 66,
  28. // enum data: key, value
  29. 18, uint(QgsField::ConfigurationFlag::None),
  30. 19, uint(QgsField::ConfigurationFlag::NotSearchable),
  31. 20, uint(QgsField::ConfigurationFlag::HideFromWms),
  32. 21, uint(QgsField::ConfigurationFlag::HideFromWfs),
  33. //18, uint(QgsField::ConfigurationFlags::None),
  34. 18, uint(QgsField::ConfigurationFlags::enum_type::None),
  35. //19, uint(QgsField::ConfigurationFlags::NotSearchable),
  36. 19, uint(QgsField::ConfigurationFlags::enum_type::NotSearchable),
  37. //20, uint(QgsField::ConfigurationFlags::HideFromWms),
  38. 20, uint(QgsField::ConfigurationFlags::enum_type::HideFromWms),
  39. //21, uint(QgsField::ConfigurationFlags::HideFromWfs),
  40. 21, uint(QgsField::ConfigurationFlags::enum_type::HideFromWfs),
  41. 0 // eod
  42. };

网络资料

QGIShttps://www.qgis.org/en/site/

QGIS GItHubhttps://github.com/qgis/QGIS

QGIS最新编译指南(QGIS3.18.1-VS2017,2021年)https://blog.csdn.net/weixin_43829992/article/details/115868573

QGIS datahttps://qgis.org/downloads/data/

参考文献

孟庆祥. OpenGIS设计开发基础教程-基于QGIS+PostGIS设计开发. 武汉大学出版社, 2018.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/117578
推荐阅读
相关标签
  

闽ICP备14008679号