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 ...
随机推荐
- getView 数据最后加一项
if (position != count-1) { viewHolder.imgLineEnd.setVisibility(View.GONE); } else { viewH ...
- Delphi读取Word
Delphi读取Word现在关于往Word中写入数据的方法比较多,现在专门开个贴子,希望大家把自己读取Word内容的心得体会说一下,包括读取word文档中,有几个段落,如何读取第几个段落,读取有拼音的 ...
- IAR编译信息分析
1.怎么设置可以查看单片的内存(消耗)使用状况? IAR的菜单栏 -->Tools -->IDE Options -->Messages -->Show build messa ...
- LeetCode题解——4Sum
题目: 给定一个数组,找出其中和为0的所有4个数组合,每个组合内的4个数非递降. 解法: ①先排序,然后利用4个指针,前两个遍历,后两个在第二个指针之后的部分里夹逼,时间O(N3). ②或者利用一个哈 ...
- <问题>Eclipse中Deploy应用到GAE的错误
1.在Eclipse中部署App到Google App Engine(GAE),有时候会遇到这样的错误: java.lang.RuntimeException: Cannot get the Syst ...
- 介绍Google App Engine
Google App Engine是一个网络应用托管服务(web application hosting service).所谓网络应用(By web application),我们的意思的可以通过网 ...
- FLEX实现两侧边栏固定中间自适应布局
<style type="text/css"> #outer{ display: flex; width: 100%; flex-flow: row nowrap; } ...
- http协议中的Content-Type
今天对http协议中的Content-Type有所理解了 它的主要功给我的感觉,还是在前台(客户端)给服务器传输数据时,描述这个数据的格式. 比如,我只传一个表单数据,但这个表单中只有文本,没有其它的 ...
- 最全面的 MySQL 索引详解
什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构 ...
- Windows 下整理内存工具推荐——cleanmem
---恢复内容开始--- cleanmem 是个不错的内存整理工具,www.xdown.com 下载有便携版提供下载. 软件有pro版和free版,一般情况下,free版够用了,没必要用pro版. p ...