访问量: 196 次浏览
加载矢量数据,首先要指明此数据的类型及其驱动程序。
加载相关数据。
在主窗口中进行显示。
(1)驱动
QGIS中,所有驱动由QgsProviderRegistry类统一管理(单例)。提供对当前工程中驱动的管理。
(2)数据管理
QGIS中,所有图层数据由QgsMapLayerRgistry类统一管理(单例)。监测图层的加载、删除,维护所有图层的内存指针列表。
(3)状态管理
QGIS中,所有图层的状态,由QgsLayerTreeGroup(QgsLayerTreeNode的容器)进行管理。
(4)连接显示
所有显示都在主窗口QgsMapCanvas中进行。QgsMapCanvas通过QgsLayerTreeMapCanvas进行连接显示。
添加矢量图层前需要将QgsMapCanvas 先冻结,加载完成后再解冻,refresh()就可以显示了。注意,要zoomToFullExtent()才能显示全图。
注:由于vs2008的智能提示实在是不够完善,以后将改为vs2010(vs2012的相关qt-addin-1.2只支持qt5,所以用的1.1,最高支持2010)。使用方法与vs2008相同,只需在工程属性的平台工具集中选择vc9就可以使用vc2008编译了。还有Qt的引用目录有变化,要添加C:/osgeo4w/include/qt4。
在vs/qt中,在blankpro工程中加入以下代码
//loadlayer
pMapCanvas->freeze(true);
QgsVectorLayer*pVectorLayer=newQgsVectorLayer("D:/test/shapefiles/states.shp","states","ogr",true);
//managelayer
QgsMapLayerRegistry::instance()->addMapLayer(pVectorLayer);
QgsLayerTreeGroup*pGroup=newQgsLayerTreeGroup("myLayerTreeGroup",Qt::Checked);
pGroup->addLayer(pVectorLayer);
//connectanddisplay
QgsLayerTreeMapCanvasBridge*pBridge=newQgsLayerTreeMapCanvasBridge(pGroup,pMapCanvas,this);
pMapCanvas->zoomToFullExtent();
pMapCanvas->setDestinationCrs(pVectorLayer->crs());
pMapCanvas->freeze(false);
pMapCanvas->refresh();
栅格地图和矢量地图在Qgis中以相同的方式管理。只要将矢量中的QgsVectorLayer对象更换为QgsRasterLayer来加载栅格图像,就可以了。
在vs/qt中,在blankpro工程中加入以下代码
//loadraster
pMapCanvas->freeze(true);
QgsRasterLayer*pRasterLayer=newQgsRasterLayer("D:/output/raster.tif","raster",true);
//managerlayer
QgsMapLayerRegistry::instance()->addMapLayer(pRasterLayer);
QgsLayerTreeGroup*pGroup=newQgsLayerTreeGroup("myLayerTreeeGroup",Qt::Checked);
pGroup->addLayer(pRasterLayer);
//connectanddisplay
QgsLayerTreeMapCanvasBridge*pBridge=newQgsLayerTreeMapCanvasBridge(pGroup,pMapCanvas,this);
pMapCanvas->zoomToFullExtent();
pMapCanvas->setDestinationCrs(pRasterLayer->crs());
pMapCanvas->freeze(false);
pMapCanvas->refresh();