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

摘要:
");return;}//步骤3:注册添加栅格数据,并个并添加到画布中QgsMapLayerRegistry::instance()-˃addMapLayer;m_mapCanvasLayerSet.append;m_mapCanvas-˃setExtent;//设置显示范围。具体代码如下://添加矢量数据小按钮槽函数voidMainWindow::addVectorlayers(){//步骤1:打开文件选择对话框QStringfilename=QFileDialog::getOpenFileName;if//如果未选择文件则返回return;QFileInfofi;QStringbasename=fi.baseName();//获取文件基名称//步骤2:创建QgsVectorLayer类QgsVectorLayer*vecLayer=newQgsVectorLayer;if(!vecLayer-˃isValid())//如果图层不合法{QMessageBox::critical(this,"error","图层无效!

一、加载栅格图像

加载栅格图像的详细步骤在下面代码里:

//添加栅格数据按钮槽函数
voidMainWindow::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文件。具体代码如下:

//添加矢量数据小按钮槽函数
voidMainWindow::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 二次开发基础 -- 显示数据

免责声明:文章转载自《Qt+QGis二次开发:加载栅格图层和矢量图层》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringBoot--Easycode插件自定义模板DWARF 中的 Debug Info 格式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

怎样将shp文件的坐标点导出来?

方法一: 1、将线矢量转化为点矢量 具体操作步骤如下: (1)arctoolboxData Management toolsFeatures双击Feature Vertices to points (2)出现feature vertices to points对话框: input features输入线矢量,output feature clas...

InVEST模型生境质量模型数据处理流程

前言 在19年的4月份,我要写一篇论文,涉及生境质量的,用到了InVEST中的生境质量模型(Habitat Quality),模型要求的数据比较多,需要用ARCGIS进行数据处理,数据处理不难,就是属性表统计计算,栅格计算,裁剪等过程,但是略繁琐,本文的目的就是捋清思路,整理出清晰的数据处理流程,对有需要的人提供一点帮助。 InVEST生境质量模型(Hab...

QT在linux下获取网络类型

开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下: 1、这里有一个linux指令:nmcli(大家自行百度即可) 2、nmcli device status 这个指令就会打印出你想要的东西 3、如何用QT去调取这个指令获取结果来进行上报呢?来一段代码吧 //执行linux指令获取返回结果 QString...

Qt 调用本地浏览器打开URL

点击Qt某些控件,查找本地浏览器打开前端传递的URL。 方法一:直接写死本地浏览器地址 1 QString programAdress = "C:Program Files (x86)GoogleChromeApplicationchrome.exe" 2 QString m_strWebUrl = "http://www.baidu.com"; 3 QS...

面向对象:MATLAB的自定义类 [MATLAB]

  这几天刚刚开始学习MATLAB的面向对象编程。以前做的事情都是用MATLAB写一些简单的脚本或者函数,这方面MATLAB成熟的函数和直截了当的矩阵运算方法和语法都很容易上手,方便人专注于算法本身。前几天写代码的时候想到,在实际用MATLAB进行数值计算时,将数据和函数用一些方法组织起来也会带来很大的便利,否则零散的数据和函数总归看着不舒服。比如,我恰好...

QMultiMap

QT 容器类之关联存储容器 - 放飞你的梦想 Seany's Blog - 博客频道 - CSDN.NET Map是单值类型的,也就是说,如果一个新的值分配给一个已存在的键,则旧值会被覆盖。如果你需要让一个key可以索引多个值,可以使用QMultiMap<K, T>。这个类允许一个key索引多个value,如: QMultiMap<i...