Qgis二次开发-QgsMapLayer(加载矢量、栅格图层)

1.简介

QgsMapLayer是所有地图层类型的基类,这是所有地图层类型(矢量,栅格)的基类,首先定义一个QgsMapCanvas地图画布,然后画布上添加图层,使用以下方法设置图层集合。

//设置当前图层集合
void setLayers (const QList< QgsMapLayer * > &layers)

以下是QgsMapLayer的类继承:

  • QgsAnnotationLayer:标注的图层
  • QgsMeshLayer:表示支持在结构化或非结构化网格上显示数据的网格层 。
  • QgsPluginLayer:插件层的基类
  • QgsRasterLayer:表示栅格层
  • QgsVectorLayer:矢量图层
  • QgsVectorTileLayer:专门用于渲染矢量贴图

2.常用方法

//设置图层的显示名称
void setName (const QString &name)

//设置图层图例的URL
void setLegendUrl (const QString &legendUrl)

//为地图层指定一个图例管理器
void setLegend (QgsMapLayerLegend *legend)

//设置数据url
void setDataUrl (const QString &dataUrl)

//返回层的数据提供程序,它可以是nullptr
const QgsDataProvider *dataProvider () const

//返回层的范围。
virtual QgsRectangle extent () const

//返回层的唯一ID,用于从QgsProject访问该层。
QString id () const

//返回层的状态
bool isValid () const

//返回图层的显示名称
QString name () const

3.示例

加载栅格图层

QList<QgsMapLayer *> m_layers;
 
//添加栅格数据按钮槽函数
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:注册添加栅格数据,并个并添加到画布中
    m_layers.append(rasterLayer);
    m_mapCanvas->setExtent(rasterLayer->extent());//设置显示范围。Extent:范围、尺度
    m_mapCanvas->setLayerSet(m_layers);//设置图层集合
    m_mapCanvas->setVisible(true);//设置是否可见
    m_mapCanvas->freeze(false);//设置是否冻结对图层的操作
    m_mapCanvas->refresh();//刷新
}

加载矢量图层


QList<QgsMapLayer *> m_layers;
 
//添加矢量数据小按钮槽函数
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:注册添加矢量数据,并个并添加到画布中
    //设置该图层的单一渲染风格
    QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol(vecLayer->geometryType());//QGis::GeometryType::Polygon
    symbol->setColor(QColor(100,100,156,255));
    vecLayer->setRendererV2( new QgsSingleSymbolRendererV2(symbol) );
 
    m_layers.append(vecLayer);
    m_mapCanvas->setExtent(vecLayer->extent());//设置显示范围。Extent:范围、尺度
    m_mapCanvas->setLayers(m_layers);//设置图层集合
    m_mapCanvas->setVisible(true);//设置是否可见
    m_mapCanvas->freeze(false);//设置是否冻结对图层的操作
    m_mapCanvas->refresh();//刷新
}

4.相关参考

Qgis二次开发-QgsAnnotationItem(添加文字、svg标注)_Mr.codeee的博客-CSDN博客

Qgis二次开发-QgsMapCanvas画布简介_Mr.codeee的博客-CSDN博客 

Qgis二次开发-QgsRubberBand详解(画线、画多边形)_Mr.codeee的博客-CSDN博客 

Qgis二次开发-QgsAnnotationItem(添加文字、图片标注(支持svg、png、jpg等常用图片格式))_Mr.codeee的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/49061.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【c语言进阶】字符函数和字符串函数知识总结

字符函数和字符串函数 前期背景求字符串长度函数strlen函数strlen函数三种模拟实现 长度不受限制的字符串函数strcpy函数strcpy函数模拟实现strcat函数strcat函数模拟实现strcmp函数strcmp函数模拟实现 长度受限制的字符串函数strncpy函数strncpy函数模拟实现strncat函数strnca…

【Qt】QML-02:QQuickView用法

1、先看demo QtCreator自动生成的工程是使用QQmlApplicationEngine来加载qml文件&#xff0c;下面的demo将使用QQuickView来加载qml文件 #include <QGuiApplication> #include <QtQuick/QQuickView>int main(int argc, char *argv[]) {QGuiApplication app(argc,…

electron dialog.showMessageBox使用案例

electron 版本&#xff1a;25.3.1 index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello World!</title><meta http-equiv"Content-Security-Policy" content"script-src self unsa…

MySQL绿色安装和配置

1、 从地址http://dev.mysql.com/downloads/mysql/中选择windows的版本下载。 2、 mysql各个版本的简介 &#xff08;1&#xff09; MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。 &#xff08;2&#xff09; MySQL Enterprise Ed…

失去SSL证书,会对网站安全造成什么影响?

作为网络世界中的“身份证”&#xff0c;SSL证书可以在网络世界中证明你是一个真实可信的企业或个人网站&#xff0c;而不是一个钓鱼网站。且在网站的服务器上部署SSL证书后&#xff0c;可以使网站与访问者之间通过SSL协议建立安全的加密连接&#xff0c;确保在Web服务器和浏览…

【Unity细节】关于拉进镜头场景后场景资源消失的问题的解决

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐关于拉进镜头场景资源消失的问题的解决⭐ 文章目录 ⭐关于拉进镜头场景资源消失…

No100.精选前端面试题,享受每天的挑战和学习(事件循环)

文章目录 1. 请解释一下JavaScript中的事件循环&#xff08;Event Loop&#xff09;是什么&#xff0c;并描述其工作原理。2. 请解释一下JavaScript中的宏任务&#xff08;macro-task&#xff09;和微任务&#xff08;micro-task&#xff09;的区别3. 在事件循环中&#xff0c;…

移动IP的原理

目的 使得移动主机在各网络之间漫游时&#xff0c;仍然能保持其原来的IP地址不变 工作步骤 代理发现与注册 主机A&#xff1a;主机A移动到外地网络后&#xff0c;通过“代理发现协议”&#xff0c;与外地代理建立联系&#xff0c;并从外地代理获得一个转交地址&#xff0c;…

非线性质量弹簧阻尼器的神经网络仿真研究(Matlab代码Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

FPGA——verilog实现格雷码与二进制的转换

文章目录 一、格雷码简介二、二进制转格雷码三、格雷码转二进制四、仿真 一、格雷码简介 格雷码是一种循环二进制码或者叫作反射二进制码。跨时钟域会产生亚稳态问题&#xff08;CDC问题&#xff09;&#xff1a;从时钟域A过来的信号难以满足时钟域B中触发器的建立时间和保持时…

【ROS第一讲】一、创建工作空间

【ROS第一讲】一、创建工作空间 一、工作空间1.src&#xff1a;2.build&#xff1a;3.devel&#xff1a;4.install: 二、创建工作空间1.工作空间的编译2.配置环境变量&#xff1a; 三、创建功能包 一、工作空间 1.src&#xff1a; 放置所有功能包源码的空间 2.build&#xf…

vue中tab隐藏display:none(v-show无效,v-if有效)

目录 背景 原因&#xff1a;display: table-cell>display:none 解决&#xff1a; 方法A.获取元素设置display&#xff08;适用于 简单场景&#xff09; 方法B.自定义tabs​​​​​​​ &#xff08;适用于 复杂场景&#xff09; 背景 内联样式(style“ ”) /this.$…

redis群集(主从复制)

---------------------- Redis 主从复制 ---------------------------------------- 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xf…

Docker 如何助您成为数据科学家

一、说明 在过去的 5 年里&#xff0c;我听到了很多关于 docker 容器的嗡嗡声。似乎我所有的软件工程朋友都在使用它们来开发应用程序。我想弄清楚这项技术如何使我更有效率&#xff0c;但我发现网上的教程要么太详细&#xff1a;阐明我作为数据科学家永远不会使用的功能&#…

5.定时器-间歇函数

网页中经常会需要一种功能&#xff1a;每隔一段时间需要自动执行一段代码&#xff0c;不需要我们手动去触发 例如&#xff1a;网页中的倒计时 ●要实现这种需求&#xff0c;需要定时器函数 5.1开启定时器 语法 setInterval(函数,间隔时间)作用&#xff1a;每隔一段时间调用这…

excel要如何自动累加某个单元格上方的所有单元格?

输入公式 SUM(INDIRECT("A1:A"&ROW()-1)) 运行实例如下图 注意图中b4&#xff0c;和b5单元格都输入相同的公式。 此方法可以避免写vba&#xff0c;以前此类问题的解决都是通过vba代码进行处理 对函数进行解析 主要使用了 INDIRECT() 2、公式说明&#xff1a;…

Windows实现端口转发(附配置过程图文详解)

文章目录 1. 前言2. 命令提示符3. 防火墙4. netsh 命令4.1 查看已有的转发规则4.2 新增转发规则4.3 删除转发规则 5. 图解汇总6. 欢迎纠正~ 1. 前言 利用Windows端口转发&#xff0c;实现本地设备 ⬅➡ 公网主机 ⬅➡ 远端服务器 2. 命令提示符 以管理员身份打开“命令提示…

成本中心修改或者创建保存时增强的实现

成本中心修改或者创建保存时增强 用户出口程序为&#xff1a;EXIT_SAPLKMA1_003。 可以通过SMOD 或者 CMOD来添加增强代码。 CMOD->COOMKS02 ->EXIT_SAPLKMA1_003 按公司要求&#xff0c;写了段代码检查 创建利成本中心时&#xff0c;业务范围要规范输入。 data PRCTR…

2023年 React 最佳学习路线

CSS CSS JavaScript JavaScript TypeScript 目前没有找到比其他文档好很多的文档地址 可以先看官网 React 新版 React 官方文档无敌 React React-router-dom V5 V6 Webpack webpack Antd antd