Qt+QGis二次开发:加载栅格图层和矢量图层
一、加载栅格图像
加载栅格图像的详细步骤在下面代码里:
//添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QString filename=QFileDialog::getOpenFileName(this,tr("打开栅格数据"),"","remote sensing image(*.tif *.tiff);;image(*.jpg *.jpeg *.png *.bmp)"); if(filename.isNull())//如果未选择文件则返回 return; QFileInfo fi(filename); QString basename=fi.baseName();//获取栅格数据名称 //步骤2:创建QgsRasterLayer类 QgsRasterLayer* rasterLayer=new QgsRasterLayer(filename,basename,"gdal",false); if(!rasterLayer->isValid())//如果图层不合法 { QMessageBox::critical(this,"error","图层无效!"); return; } //步骤3:注册添加栅格数据,并个并添加到画布中 QgsMapLayerRegistry::instance()->addMapLayer(rasterLayer); m_mapCanvasLayerSet.append(rasterLayer); m_mapCanvas->setExtent(rasterLayer->extent());//设置显示范围。Extent:范围、尺度 m_mapCanvas->setLayerSet(m_mapCanvasLayerSet);//设置图层集合 m_mapCanvas->setVisible(true);//设置是否可见 m_mapCanvas->freeze(false);//设置是否冻结对图层的操作 m_mapCanvas->refresh();//刷新 //在状态条设置地图的比例尺 double dCurrScale= m_mapCanvas->scale(); QString sCurrScale=this->m_scaleEdit->toString(dCurrScale); this->m_scaleEdit->setScaleString(sCurrScale); }
二、加载矢量图层
加载矢量图层跟栅格图层差不多的步骤,这里矢量图层指的是shp文件。具体代码如下:
//添加矢量数据小按钮槽函数 void MainWindow::addVectorlayers() { //步骤1:打开文件选择对话框 QString filename=QFileDialog::getOpenFileName(this,tr("打开矢量数据"),"","ESRI Shapefile(*.shp)"); if(filename.isNull())//如果未选择文件则返回 return; QFileInfo fi(filename); QString basename=fi.baseName();//获取文件基名称 //步骤2:创建QgsVectorLayer类 QgsVectorLayer* vecLayer=new QgsVectorLayer(filename,basename,"ogr",false); if(!vecLayer->isValid())//如果图层不合法 { QMessageBox::critical(this,"error","图层无效!"); return; } //步骤3:注册添加矢量数据,并个并添加到画布中 QgsMapLayerRegistry::instance()->addMapLayer(vecLayer); //设置该图层的单一渲染风格 QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol(vecLayer->geometryType());//QGis::GeometryType::Polygon symbol->setColor(QColor(100,100,156,255)); vecLayer->setRendererV2( new QgsSingleSymbolRendererV2(symbol) ); m_mapCanvasLayerSet.append(vecLayer); m_mapCanvas->setExtent(vecLayer->extent());//设置显示范围。Extent:范围、尺度 m_mapCanvas->setLayerSet(m_mapCanvasLayerSet);//设置图层集合 m_mapCanvas->setVisible(true);//设置是否可见 m_mapCanvas->freeze(false);//设置是否冻结对图层的操作 m_mapCanvas->refresh();//刷新 //在状态条设置地图的比例尺 double dCurrScale= m_mapCanvas->scale();//world.shp文件默认打开的比例尺为:91329159:1 QString sCurrScale=this->m_scaleEdit->toString(dCurrScale); this->m_scaleEdit->setScaleString(sCurrScale); }
参考链接: