您的位置:首页 > 其它

QGIS二次开发第一讲

2012-06-25 19:36 363 查看

新建QtApplication项目

项目命名为qgis1,在qgis1.h文件中增加以下代码
// QGIS Includes

//

#include <qgsapplication.h>//扩展了Qapplication以便可以获取QGIS的特定资源,比如主题路径和数据库路径等。

#include <qgsproviderregistry.h>//是一个单体类来管理数据访问程序(data provider),用于加载插件
#include <qgssinglesymbolrenderer.h>//是一个渲染类,利用Qgssymbol来显示所有特征,可以用来渲染点,线 面用一个颜色(每个矢量图层必须有一个符号关联)

#include <qgsmaplayerregistry.h>//此类用来记录现在已经加载的地图图层,并且提供方法来获取指向地图的指针或者删除之

#include <qgsvectorlayer.h>//矢量图层

#include <qgsmapcanvas.h>//一个类保存了指向图层的指针,和图层是否可见等信息。是主要的地图区域,用于绘制地图。

//

// Qt Includes

//

#include <QString>

#include <QApplication>

#include <QWidget>

在qgis1.cpp文件的qgis构造函数中,添加如下代码
qgis1::qgis1(QWidget *parent, Qt::WFlags flags)

: QWidget(parent, flags)

{

ui.setupUi(this);

QString myPluginsDir = "C:\\Program Files\\qgis1.7.0\\plugins";//插件路径(在编译好的qgis文件夹下的plugins文件夹)

QString myLayerPath = "E:/Qgis/code_examples/1_hello_world_qgis_style/data";//图层路径(可以替换成自己的路径)

QString myLayerBaseName = "test";//图层名称

QString myProviderName = "ogr";//data provider 的名称,告诉程序改用什么来加载数据,通常用ogr和postgres

QgsProviderRegistry::instance(myPluginsDir);//初始化插件的目录

QgsVectorLayer * mypLayer = new QgsVectorLayer(myLayerPath, myLayerBaseName, myProviderName);//初始化矢量图层,三个参数如上介绍。

QgsSingleSymbolRenderer *mypRenderer = new QgsSingleSymbolRenderer(mypLayer->geometryType());//分配一个地图渲染器,需要传入几何类型(vectorlayer是一个自我描述的类)

QList <QgsMapCanvasLayer> myLayerSet;//QgsMapCanvasLayer存在于QgsMapCanvas类中,用于支持mapcanvas的数据

mypLayer->setRenderer(mypRenderer);

QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);//实例化地图注册类之后,然后增加图层。

myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));//向list数据中增加mapCanvasLayer

//创建mapCanvas

QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);

mypMapCanvas->setExtent(mypLayer->extent());

mypMapCanvas->enableAntiAliasing(true);//开启反锯齿效果

mypMapCanvas->setCanvasColor(QColor(255, 255, 255));

mypMapCanvas->freeze(false);

// Set the Map Canvas Layer Set

mypMapCanvas->setLayerSet(myLayerSet);//设定mapCanvas的数据集

mypMapCanvas->setVisible(true);

mypMapCanvas->refresh();

}

然后在main.cpp文件中,修改main函数代码如下:
int main(int argc, char *argv[])

{

QgsApplication a(argc, argv,true);//在这里换成QgsApplication,方便调用QgsApplication的静态方法。

qgis1 w;

//w.show();

return a.exec();

}

最终效果图如下:(可以支持放大缩小)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: