Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,并且QGis的版本号很老。在mingw下直接开发搭建好开发环境的样例少之又少。基于最新的Qgis2.4.0版本号做了对应的尝试,并成功搭建对应的环境。大致的配置例如以下:
因为在搭建的过程之中遇到的问题实在太多,没有一一记录下来。所以在本文中没有做过多的描写叙述。如有疑问能够联系husteryou@163.com。或者留言
环境搭建
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW91ZmFuZ3l1YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW91ZmFuZ3l1YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
pro文件配置
QT += core gui xml greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = qgisdemo
TEMPLATE = app SOURCES += main.cpp# \
#mainwindow.cpp #INCLUDEPATH += qgis-2.4.0
#INCLUDEPATH += qgis-2.4.0\core
#INCLUDEPATH += qgis-2.4.0\core\symbology-ng
#INCLUDEPATH += qgis-2.4.0\analysis
#INCLUDEPATH += qgis-2.4.0\gui INCLUDEPATH += qgis-2.4.0
INCLUDEPATH += qgis-2.4.0/core
INCLUDEPATH += qgis-2.4.0/core/symbology-ng
INCLUDEPATH += qgis-2.4.0/analysis
INCLUDEPATH += qgis-2.4.0/gui FORMS += mainwindow.ui win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_analysis
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_analysis
else:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_analysis INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/ win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_core
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_core
else:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_core INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/ win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_gui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_gui
else:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_gui INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
实例
#include <QApplication>
#include <QString>
#include <QWidget>
#include <qgis.h>
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgssinglesymbolrendererv2.h>
#include <qgsmaplayerregistry.h>
#include <qgsvectorlayer.h>
#include <qgsmapcanvas.h>
#include <qgsgeometry.h>
#include "mouseprocess.h"
#include "paintprocess.h"
int main( int argc, char *argv[] )
{
QgsApplication a( argc, argv ,true);
//////////////////////////////////////////////////////////////////////////
//注意这三行代码须要更改路径;
QString myPluginsDir ="D:/Qt/workspace/qgis-2.4.0/qgis-2.4.0/build/output/plugins";//插件路径(编译好的qgis目录下的plugins目录);
QString myLayerPath1 ="F:/gis/data_1_3/10m_admin_0_countries.shp";//图层路径,必须设置为你电脑里面shp文件的路径,不然打不开数据;
QString myLayerPath2 ="F:/gis/qgis_sample_data/shapefiles/airports.shp";//图层路径,必须设置为你电脑里面shp文件的路径,不然打不开数据;
//////////////////////////////////////////////////////////////////////////
QgsProviderRegistry::instance( myPluginsDir); //初始化插件的文件夹;
QgsVectorLayer * mypLayer1 = new QgsVectorLayer( myLayerPath1, "myLayer1", "ogr" ); //初始化矢量图层;
QgsVectorLayer * mypLayer2 = new QgsVectorLayer( myLayerPath2, "myLayer2", "ogr" ); //初始化矢量图层;
QgsVectorLayer * mypLayer3 = new QgsVectorLayer(); //初始化矢量图层;
mypLayer3->setRendererV2(QgsFeatureRendererV2::defaultRenderer(QGis::Point));
QgsFeatureIterator iter = mypLayer2->getFeatures();
QgsFeature feature;
while(iter.nextFeature(feature)){
QgsGeometry *geo = feature.geometry();
QgsPoint point = geo->asPoint();
//qDebug() << point.x() << point.y() << endl;
}
for(int index = 0; index < 100; index ++){
QgsPoint point;
double xmin = -4.4802e+06;
double xmax = 4.61512e+06;
double ymin = 1.43353e+06;
double ymax = 6.50259e+06;
point.setX(xmin + (xmax - xmin) * ((double) qrand()) / RAND_MAX);
point.setY(ymin + (ymax - ymin) * ((double) qrand()) / RAND_MAX);
QgsFeature feature;
QgsGeometry *geo = QgsGeometry::fromPoint(point);
feature.setGeometry(geo);
mypLayer3->addFeature(feature);
mypLayer3->updateFeature(feature);
qDebug() << point.x() << point.y() << endl;
}
QList<QgsPoint> ring;
//-4.4802e+06 4.61512e+06 1.43353e+06 6.50259e+06
ring.append(QgsPoint(-4.4802e+06, 1.43353e+06));
ring.append(QgsPoint(4.61512e+06, 6.50259e+06));
ring.append(QgsPoint(2.61512e+06, 4.50259e+06));
//mypLayer2->addRing(ring);
qDebug() << mypLayer2->featureCount() << endl;
//QgsSingleSymbolRendererV2 *mypRenderer = new QgsSingleSymbolRendererV2( mypLayer->geometryType() );
QList <QgsMapCanvasLayer> myLayerSet;
// mypLayer->setRenderer( mypRenderer );
//mypLayer->setRendererV2(mypRenderer);
QgsMapLayerRegistry::instance()->addMapLayer( mypLayer1, true );
QgsMapLayerRegistry::instance()->addMapLayer( mypLayer2, true );
QgsMapLayerRegistry::instance()->addMapLayer( mypLayer3, true );
//myLayerSet.append( QgsMapCanvasLayer(mypLayer3, true ) );
myLayerSet.append( QgsMapCanvasLayer(mypLayer2, true ) );
//myLayerSet.append( QgsMapCanvasLayer(mypLayer1, true ) );
QgsRectangle extent = mypLayer2->extent();
qDebug() << extent.xMinimum() << extent.xMaximum() << extent.yMinimum() << extent.yMaximum() << endl;
QgsMapCanvas * mypMapCanvas = new QgsMapCanvas( 0, 0 );
mypMapCanvas->setExtent(mypLayer2->extent() );
mypMapCanvas->enableAntiAliasing( true);
mypMapCanvas->setCanvasColor( QColor(255, 255, 255 ) );
mypMapCanvas->freeze( false );
mypMapCanvas->setLayerSet( myLayerSet);
mypMapCanvas->setVisible( true );
mypMapCanvas->refresh();
mypMapCanvas->show();
MouseProcess *mouseProcess = new MouseProcess();
PaintProcess *paintProcess = new PaintProcess();
QObject::connect(mypMapCanvas, SIGNAL(xyCoordinates(QgsPoint)), mouseProcess, SLOT(xyCoordinates(QgsPoint)));
QObject::connect(mypMapCanvas, SIGNAL(renderComplete(QPainter*)), paintProcess, SLOT(renderComplete(QPainter*)));
return a.exec();
}
执行结果
Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发的更多相关文章
- [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)
前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...
- 深入理解基于selenium的二次开发
对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...
- Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务
1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...
- jmeter4.0 源码编译 二次开发
准备: 1.jmeter4.0源码 - apache-jmeter-4.0_src.zip 2.IDE Eclipse - Oxygen.3 Release (4.7.3) 3.JDK - 1.8.0 ...
- 基于Django+celery二次开发动态配置定时任务 ( 二)
一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...
- Linux基于webRTC的二次开发(二) 实现远程桌面共享
webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...
- C#基于AE组件二次开发常见问题
由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...
- 基于Django+celery二次开发动态配置定时任务 ( 一 )
需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...
- Linux基于webRTC的二次开发(一)
最近在做Linux平台下webRTC的二次开发,一路摸索,中间踩了不少坑,这一篇博客先来简单介绍下Linux上如何使用GCC编译webRTC. 为什么使用GCC编译? 这其实是无奈之举,Linux下w ...
随机推荐
- POJ 1160 Post Office
题意:有n个村庄,要在其中m个村庄里建邮局,每个村庄去邮局的代价为当前村庄到最近的一个有邮局村庄的路程,问总最小代价是多少. 解法:dp.dp[i][j]表示在前j个村庄建立i个邮局后的代价,则状态转 ...
- [Everyday Mathematics]20150203
设 $f$ 在 $\bbR$ 上连续可导, 且 $\dps{f'\sex{\frac{1}{2}}=0}$. 试证: $$\bex \exists\ \xi\in \sex{0,\frac{1}{2} ...
- hadoop2.20.0集群安装教程
一.安装的需要软件及集群描述 1.软件: Vmware9.0:虚拟机 Hadoop2.2.0:Apache官网原版稳定版本 JDK1.7.0_07:Oracle官网版本 Ubuntu12.04LTS: ...
- C++ STL算法系列3---求和:accumulate
该算法在numeric头文件中定义. 假设vec是一个int型的vector对象,下面的代码: //sum the elements in vec starting the summation wit ...
- Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开
Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...
- 仿酷狗音乐播放器开发日志二十三 修复Option控件显示状态不全的bug(附源码)
转载请说明原出处,谢谢~~ 整个仿酷狗工程的开发将近尾声,现在还差选项设置窗体的部分,显然在设置窗体里用的最多的就是OptionUI控件,我在写好大致的布局后去测试效果,发现Option控件的显示效果 ...
- C++容器学习
以前自学C++的时候就没怎么看容器,一直以来也没怎么编过C++程序,现在想用C++写点东西,突感容器类型有些生疏,故做此笔记.(参考<C++ primer> 容器:容纳特定类型对象的集合. ...
- Java-note-调试小技巧
使用 Eclipse 调试 Java 程序的 10 个技巧 英文原文:Again! – 10 Tips on Java Debugging with Eclipse 你应该看过一些如<关于调试的 ...
- Ubuntu_wifi&pppoe
学校现在上网全部要拨号,加上我在宿舍用的是无线路由,也就是要在ubuntu下实现连接wifi后再拨号,这个功能在默认的ubuntu网络设置里面是没有的,里面有dsl但是对有线网络使用的,有点小郁闷.不 ...
- fedora20安装hadoop-2.5.1
(博客园-番茄酱原创) 首先感谢作者lxdhdgss,他的博文直接帮助了我如何安装hadoop,下面是他的博文修改版,用于安装在fedora20上面的,jdk1.8版本. 到hadoop官网去copy ...