QGIS二次开发第一讲
新建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();
}
最终效果图如下:(可以支持放大缩小)