• 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-加载矢量、栅格图层

    3、QGis 二次开发基础 -- 显示数据

  • 相关阅读:
    转:C++ 智能指针的正确使用方式
    C/C++各个周期的学习
    转: 工作中用的C++库
    转:【软件设计】深入理解日志系统的意义
    初级爬虫第四天
    初级爬虫第三天
    初级爬虫第二天
    初级爬虫第一天
    pep8介绍
    MySQL训练营01
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/10376550.html
Copyright © 2020-2023  润新知