由于工作要求,今年需要基于Qt搞跨平台的GIS。前期未曾接触过Qt,最近也简单学习了下,开源的QGIS是非常不错的学习资源,下了最新版的QGIS源码,不过在VS2015下却没法直接打开。网上查了很多资料,借鉴了很多前辈的经验(大部分文档QGIS源码的版本都比较老)。虽然过程很艰辛,不过最后总算编译成功且能运行了,心里倍激动。废话不多说,赶紧上干货,具体如下:

一、资源准备

  1、QGIS 2.18.15源码:

  地址:qgis-latest.tar.bz2(2018.01.19已更新到2.18.16,由于我18号下的,所以文中的针对的是2.18.15版本源码的,后续的编译应该差不多);

  2、Qt 5.9.3:

  地址:qt-enterprise-windows-x86-5.9.3(如果链接下载不了,请去官方地址下载,只用下载msvc2015_64即可,我用的是VS2015编译64位的);

  3、VS2015:

  这个就自己去下载安装了,比较简单(记得勾选VC++);另外,可以通过VS自带的工具和扩展,下载Qt插件,QtPackage,然后把Qt5.9.3下的msvc2015_64设置过去就行;

  4、CMake:

  地址:cmake-3.10.2-win64-x64

  5、cygwin(主要用于下载flex及bison)

  地址:Cygwin-setup-x86_64

    

  

  

  

  

  

  说明:(1)View选择Category;(2)Search输入要下载的内容,本工具只用下载flex和bison;(3)选择Devel,展开,如果当前未下载则显示的是"Skip",点击会变成具体的版本,然后点击下一步即可下载(由于我这边都下过了,所以显示的是keep)。按照这里的说明,分别下载flex和bison即可;(4)上述路径不要有中文或空格。

  6、osgeo4w(主要用于下载gdal等)

  地址:osgeo4w-setup-x86_64

  

  

  

  

  

  

  

  说明:(1)这里的操作和Cygwin基本一致;(2)Search输入要下载的内容,具体包括:expat、fcgi、gdal、grass、gsl-devel、iconv、libspatialindex-devel、pyqt5、python3-devel、python3-qscintilla、python3-nose2、python3-future、python3-pyyaml、python3-mock、qca-qt5-devel、qca-qt5-libs、qscintilla-qt5、qt5-devel、qt5-libs-debug、qtwebkit-qt5-devel、qtwebkit-qt5-libs-debug、qwt-devel-qt5、sip-qt5、spatialite、qjson;(3)上述路径不要有中文或空格

二、编译过程

  1、制作bat设置环境变量:

  先贴我这边的bat文件,保存成path.bat(随便命名就行)  

@echo off
set VS140COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64

set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib

set OSGEO4W_ROOT=C:\QGIS\OSGeo4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%;D:\Program Files\CMake\bin;C:\QGIS\cygwin64\bin;C:\QGIS\OSGeo4W64\apps\Python36

@set GRASS_PREFIX=C:/QGIS/OSGeo4W64/apps/grass/grass-7.2.2
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib

@cmd

  说明:(1)VS140COMNTOOLS表示VS15,call后续跟的X64表示64位编译;(2)Include表示头文件,这里加了Win10系统的sdk;Lib表示编译的动态库;(3)Path表示环境变量;4)特别注意:GRASS_PREFIX的路径地址必须是“/”,Path路径多个;之间不能有空格。

  2、启动Cmake进行配置:

  

  

  点击:Configure,如果遇到错误,则解决(手动配置路径即可),以下是我这边配置的最终图:

  

  

  

  

  最终配置完成后,没有错误,图如下:

   

  3、CMake生成解决方案:

  

  4、启动VS编译解决方案:

  

  打开解决方案后,默认有好几百个工程,编译太废劲,我这边只保留了以下几个,不用的都删了(后续若需要,则再加),选择RelWithDebInfo方式编译:

  

  说明:

  (1)优先编译qgis_core,此工程编译通过后,再编译其他的;

  (2)编译过程中proj.lib相关报错,将名称换成proj_i.lib即可;

  

  (3)找不到 <netinet/in.h>,注释掉即可;

  (4)编译qgis工程qtmain.lib报错的解决,更换地址采用5.9.3的

  

  全部编译后,位于output目录下,最终编译后截图如下:

  

 

  5、启动自己编译的Qt软件:

  将OSGeo4W64\apps\Qt5\bin下的dll全部拷贝到同目录下,启动qgis.exe,会报错如下:

  

  此时,只需将OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夹拷贝到刚才的目录即可,截图如下:

  

  最终启动qgis.exe,效果图如下(部分图标没有,功能不全,后续可逐渐加入其他工程编译)

  

posted @ 2018-01-24 18:02 简单程序员 阅读(11538) 评论(4) 推荐(0) 编辑
摘要: 一、问题描述 虽然SOE开发已经老早出来了(ArcGIS 10.1 不再支持DCOM开发,所以以往的基于AO+WebService需要转变思路),不过由于跟工作关联性不是很大,一直未系统学习过。网上下了不少资料,计划系统的学习下。由于想搞明白整个使用流程,就先用自带的模板('hello word') 阅读全文
posted @ 2017-09-22 15:22 简单程序员 阅读(1646) 评论(0) 推荐(0) 编辑
摘要: 收藏几个不错的JQuery资源网站,以后备用,给共享者点个赞!!! http://jquery.com/ http://www.htmleaf.com/ http://www.oschina.net/project/tag/273/jquery/ 阅读全文
posted @ 2015-09-18 16:41 简单程序员 阅读(701) 评论(0) 推荐(0) 编辑
摘要: 由于RedHat是商业版的,通常由于没有注册,导致yum程序无法使用(linux下面,yum是个安装软件的“神器”)。此时可用CentOS的地址进行替换。下面将一步步说明如何处理:一、删除RedHat自带的yum相关文件 1、文件位置:/etc/yum.conf和/etc/yum.repo.d... 阅读全文
posted @ 2015-09-17 15:10 简单程序员 阅读(11647) 评论(0) 推荐(1) 编辑
摘要: 一、问题描述 1、采用gdb模板文件,在ArcSDE(数据服务器)中批量创建数据库表(数据迁移)时,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法Transfer时,报错,错误为:Exception from HRESULT: 0x8004153... 阅读全文
posted @ 2015-06-11 12:00 简单程序员 阅读(1987) 评论(0) 推荐(1) 编辑
摘要: 为了界面友好,一般的操作时间较长时,都需要增加进度条提示。由于WPF自带的进度条其实不怎么好看,而且没啥视觉效果。后来,装VS2012时,发现安装过程中进度条效果不错,于是上网查了资料。学习了ModernUI(开源的),地址:https://github.com/firstfloorsoftwa... 阅读全文
posted @ 2015-06-08 15:11 简单程序员 阅读(7904) 评论(6) 推荐(5) 编辑
摘要: Fluent Ribbon Control Suite 就不做介绍了,网上的例子比较多,类似Office2007及以后版本的图形界面(菜单栏)。官网地址:https://github.com/fluentribbon/Fluent.Ribbon,这里主要分享一下其中一个控件的用法。 最终实现效... 阅读全文
posted @ 2015-05-27 15:29 简单程序员 阅读(2899) 评论(2) 推荐(2) 编辑
摘要: 前段时间,做服务器端监控系统,为了界面好看,采用WPF。硬件相关监控,比如CPU、内存等,想用仪表盘控件。网上找了很多这种控件,基本上都是第三方商业控件(虽然很漂亮,不过得money...)。最后在CodeProject上找到了一款还不错的开源的仪表盘控件CircularGauge。 用了下该... 阅读全文
posted @ 2015-04-30 14:11 简单程序员 阅读(6741) 评论(4) 推荐(3) 编辑
点击右上角即可分享
微信分享提示