Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
来源:互联网 发布:在家赚钱 知乎 编辑:程序博客网 时间:2024/06/01 18:49
关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,而且QGis的版本非常老,在mingw下直接开发搭建环境的例子少之又少,基于最新的Qgis2.4.0版本做了相应的尝试,并成功搭建相应的环境,大致的配置如下:
由于在搭建的过程之中遇到的问题实在太多,没有一一记录下来,所以在本文中没有做过多的描述,如有疑问可以联系husteryou@163.com,或者留言
环境搭建
pro文件配置
QT += core gui xmlgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = qgisdemoTEMPLATE = appSOURCES += 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\guiINCLUDEPATH += qgis-2.4.0INCLUDEPATH += qgis-2.4.0/coreINCLUDEPATH += qgis-2.4.0/core/symbology-ngINCLUDEPATH += qgis-2.4.0/analysisINCLUDEPATH += qgis-2.4.0/guiFORMS += mainwindow.uiwin32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_analysiselse:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_analysiselse:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_analysisINCLUDEPATH += $$PWD/DEPENDPATH += $$PWD/win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_coreelse:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_coreelse:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_coreINCLUDEPATH += $$PWD/DEPENDPATH += $$PWD/win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_guielse:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -llibqgis_guielse:unix:!macx: LIBS += -L$$PWD/lib/ -llibqgis_guiINCLUDEPATH += $$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();
}
运行结果
3 0
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
- QGIS二次开发,QGIS2.8.9+VS2010
- 基于QGIS-pyqt的地理信息系统二次开发(一)
- QGIS2.4.0-vs2008-qt4.7.1编译过程
- 基于开源C++的QGIS二次开发学习(一)——属性拷贝
- Poppler 及 Poppler-Qt4 在Windows下基于MinGW的静态编译 - Poppler Qt4
- QGIS二次开发,我的第一篇
- 基于Qt5的QGIS编译
- QGIS二次开发第一讲
- QGIS二次开发第二讲
- QGIS二次开发第三讲
- QGIS二次开发第四讲
- QGIS二次开发第一讲
- QGIS二次开发第二讲
- QGIS二次开发第三讲
- QGIS二次开发第四讲
- qgis二次开发之编译
- Python qgis二次开发
- java正则表达式验证邮箱、电话号码示例
- 题目1076:N的阶乘
- 作业2
- 常见的9种内部排序(C语言实现)
- Win95+IE3 – Win10+IE11全版本执行漏洞(含POC)
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
- Codeforces 34B-Sale(暴力)
- ZOJ-3291-Never End
- Android:Failed to install UIWidgetTest.apk on device 'emulator-5554': timeout
- Android 单独开启线程处理服务器数据提交和访问
- Redis缓存加速
- 链表
- 猜大小游戏
- Java I/O操作汇总