关于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的二次开发的更多相关文章

  1. [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)

    前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...

  2. 深入理解基于selenium的二次开发

    对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...

  3. Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务

    1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...

  4. 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 ...

  5. 基于Django+celery二次开发动态配置定时任务 ( 二)

    一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...

  6. Linux基于webRTC的二次开发(二) 实现远程桌面共享

    webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...

  7. C#基于AE组件二次开发常见问题

    由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...

  8. 基于Django+celery二次开发动态配置定时任务 ( 一 )

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  9. Linux基于webRTC的二次开发(一)

    最近在做Linux平台下webRTC的二次开发,一路摸索,中间踩了不少坑,这一篇博客先来简单介绍下Linux上如何使用GCC编译webRTC. 为什么使用GCC编译? 这其实是无奈之举,Linux下w ...

随机推荐

  1. POJ 1195- Mobile phones(二维BIT)

    题意: 矩阵上的单点更新,范围求和 #include <map> #include <set> #include <list> #include <cmath ...

  2. HDU 5727 Necklace 环排+二分图匹配

    这是从山东大学巨巨那里学来的做法 枚举下黑色球的排列总数是8!,然后八个白球可选的位置与左右两个黑球存不存在关系建图就行 这是原话,具体一点,每次生成环排,只有互不影响的才连边 最后:注重一点,n个数 ...

  3. oracle检查点checkpoint信息

    1.关于checkpoint的概述 checkpoint是oracle在数据库一致性关闭.实例恢复和oracle基本操作中不可缺少的机制,包含以下相关的含义: A.检查点的位置(checkpoint ...

  4. 如何在 Windows Azure 的虚拟机 ubuntu 上面安装和配置 openVPN(二)

    第二步:登录到虚拟机 一旦创建好虚拟机后,默认azure会打开TCP 22端口,即SSH的端口.所以,我们可以通过远程连接,访问和管理该虚拟机. 首先,下载一个PuTTY软件.该软件很简单,就一个可执 ...

  5. bzoj 4278 [ONTAK2015]Tasowanie(SA,贪心)

    [题意] 给定两个字符串,求二路归并后最小字典序的字符串. [思路] 连接两个字符串后求出rank数组.通过比较rank数组进行二路归并. [代码] #include<cstdio> #i ...

  6. 多校5 1004 HDU5784 统计锐角三角形数目

    http://acm.hdu.edu.cn/showproblem.php?pid=5784 题意:n个点,找多少个锐角三角形数目 思路:极角排序+two pointers 当前选择的点集要倍增一倍, ...

  7. lucene学习笔记:三,Lucene的索引文件格式

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  8. 执行原始的 SQL 查询

    The Entity Framework Code First API includes methods that enable you to pass SQL commands directly t ...

  9. Struts2零碎点整理

    1. 关于 Struts2 请求的扩展名问题 1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用的一些常量 2). struts ...

  10. POJ 3169 Layout (差分约束系统)

    Layout 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/S Description Like everyone else, ...