Qt+QGis二次开发:加载栅格图层和矢量图层

Posted rainbow70626

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
}

参考链接:

1、QGis(一)加载栅格图层和矢量图层

2、Qgis开发3-加载矢量、栅格图层

以上是关于Qt+QGis二次开发:加载栅格图层和矢量图层的主要内容,如果未能解决你的问题,请参考以下文章

Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)

Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形

QGIS如何使用WMS图层

QGIS如何使用WMS图层

QGIS入门实战精品教程10.3:QGIS栅格DEM数据重复类方法案例汇总

QGIS入门实战精品教程10.3:QGIS栅格DEM数据重复类方法案例汇总