一、加载栅格图像
加载栅格图像的详细步骤在下面代码里:
//添加栅格数据按钮槽函数
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);
}
参考链接:
来源:oschina
链接:https://my.oschina.net/u/4330093/blog/3649624