当前位置: 首页 > news >正文

美容网站制作/二维码推广赚佣金平台

美容网站制作,二维码推广赚佣金平台,桃城区网站制作公司,太原做响应式网站Shapefile 为 OGR 所支持的最重要的数据格式之一&#xff0c;自然可以被 QGIS 加载。那么该如何显示Shapefile呢&#xff1f; 一、先上代码 #include <qgsapplication.h> #include <qgsproviderregistry.h> #include <qgsmapcanvas.h> #include <qgsvec…

Shapefile 为 OGR 所支持的最重要的数据格式之一,自然可以被 QGIS 加载。那么该如何显示Shapefile呢?

一、先上代码

#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgsmapcanvas.h>
#include <qgsvectorlayer.h>int main(int argc, char **argv)
{// 创建 QgsApplication 实例QgsApplication app(argc, argv, true);// 设置并检查数据插件目录QgsProviderRegistry::instance("D:/OSGeo4W/apps/qgis-ltr/plugins");// 控制台打印已载入的插件目录qDebug() << "QGIS data providers loaded:" << QgsProviderRegistry::instance()->providerList();// 设置 GDAL 数据目录环境变量qputenv("GDAL_DATA", "D:\\OSGeo4W\\apps\\gdal\\share\\gdal");// 创建 QgsCanvas 画布实例QgsMapCanvas c;// 从磁盘 .shp 文件创建矢量图层QgsVectorLayer* pVectorLayer = new QgsVectorLayer(u8"E:\\TestImage\\全国省界\\全国省界.shp", u8"省界");// 确认图层是否创建成功qDebug() << "Is layer valid:" << pVectorLayer->isValid();// 将图层添加到画布上c.setLayers(QList<QgsMapLayer*>() << pVectorLayer);// 设置画布窗体标题并显示画布// 画布本身是 QWidget 的子类,因此可以承担 QWidget 的所有操作c.setWindowTitle(u8"QGIS 二次开发:画布");c.show();// 缩放到图层的空间范围c.zoomToFullExtent();// 启动 QgsApplication 实例return app.exec();
}

二、效果图

 三、代码讲解

(一)

// 创建 QgsApplication 实例
QgsApplication app(argc, argv, true);

需要头文件<qgsapplication.h>

参见QGIS API Documentation: QgsApplication Class Reference

该类继承自QApplication,提供对QGIS特定资源(如主题路径、数据库路径等)的访问。

构造函数接受 5 个参数。其中 3 个是必备参数。前两个参数传入 main 函数的两个参数即可,第三个参数表示是否激活图形界面 GUI,一般设置为 true,除非你想做一个命令行的程序,如单纯用于数据处理,无需界面的程序。这里我们设置为 true。 

(二)

// 设置并检查数据插件目录
QgsProviderRegistry::instance("D:/OSGeo4W/apps/qgis-ltr/plugins");

需要头文件<qgsproviderregistry.h>

官方文档QGIS API Documentation: QgsProviderRegistry Class Reference

参数如下,pluginPath为数据插件的路径


QgsProviderRegistry * QgsProviderRegistry::instance(const QString & pluginPath = QString())	

数据驱动插件为一系列的动态链接库文件,存放于 QGIS 开发包的 plugins 目录下

// 控制台打印已载入的插件目录
qDebug()<<"QGIS data providers loaded:"<<QgsProviderRegistry::instance()->providerList();

 调用 QgsProviderRegistry 的成员函数 providerList() 可以返回一个存放所有支持的数据驱动插件的 QStringList 字符串列表,可以用于 debug。

参见QGIS API Documentation: QgsProviderRegistry Class Reference

(三) 

// 设置 GDAL 数据目录环境变量
qputenv("GDAL_DATA", "D:\\OSGeo4W\\apps\\gdal\\share\\gdal");

随后程序会检测 GDAL 的环境变量 GDAL_DATA 是否设置。该环境变量为一个目录,存放 GDAL 所需的资源和数据文件等。利用 Qt 提供的全局函数 qputenv() 可以方便的设置环境变量而无需修改操作系统设置,该环境变量仅在当前程序中生效。

参见官方文档 https://doc.qt.io/qt-5/qtglobal.html#qputenv

(四)

// 创建 QgsCanvas 画布实例
QgsMapCanvas c;

头文件<qgsmapcanvas.h>

它是 Qt 用于描述图形场景的 QGraphicsView 的子类,用于显示GIS类型的数据。

官方文档 QGIS API Documentation: QgsMapCanvas Class Reference 

(五)

// 从磁盘 .shp 文件创建矢量图层
QgsVectorLayer* pVectorLayer = new QgsVectorLayer(u8"E:\\TestImage\\全国省界\\全国省界.shp", u8"省界");

 头文件<qgsvectorlayer.h>

创建 QgsVectorLayer 的实例。该类在 QGIS 中描绘一个矢量图层,是 QgsMapLayer 的子类。

继承关系如下

Inheritance graph

构造函数原型为

QgsVectorLayer::QgsVectorLayer	(const QString & path = QString(),const QString & baseName = QString(),const QString & providerLib = "ogr",const QgsVectorLayer::LayerOptions & options = QgsVectorLayer::LayerOptions() 
)	

 path为参数的路径或url,baseName为在图例中展示的图层名称,

参见QGIS API Documentation: QgsVectorLayer Class Reference

图层创建完成后,可调用 isValid() 方法查看是否创建成功。

// 确认图层是否创建成功
qDebug() << "Is layer valid:" << pVectorLayer->isValid();

该方法位于QgsVectorLayer的父类QgsMapLayer中,返回图层的状态,创建成功则返回True,否则返回False。如果返回False,则可以通过QgsMapLayer的error()方法进步查看错误详情。

(六)

// 将图层添加到画布上
c.setLayers(QList<QgsMapLayer*>() << pVectorLayer);

图层创建成功后,将其添加到画布。调用画布类 QgsMapCanvas 的 setLayers() 方法即可,该方法会设置一个将在画布上面显示的图层列表。

函数原型如下,参见 QGIS API Documentation: QgsMapCanvas Class Reference

void QgsMapCanvas::setLayers(const QList< QgsMapLayer * > & layers)	

该方法接受一个图层基类 QgsMapLayer 指针的列表。通常情况下,图层越位于列表前面(即下标越小),绘制顺序越靠后(即越靠近观察者)。

(七)

// 设置画布窗体标题并显示画布
// 画布本身是 QWidget 的子类,因此可以承担 QWidget 的所有操作
c.setWindowTitle(u8"QGIS 二次开发:画布");
c.show();

在 Qt 中,只要是 QWidget 及其子类都可以作为单独的程序窗体处理。QgsMapCanvas 作为 QGraphicsView 的子类,当然也是QWidget的子类,我们可以使用QWidget的公共槽函数setWindowTitle()为其设置窗口标题,然后使用show()让其像普通的窗口一样显示出来。

(八)

// 缩放到图层的空间范围
c.zoomToFullExtent();

调用QgsMapCanvas的zoomToFullExtent(),这一步操作会让 QgsMapCanvas 缩放到内部所有可见图层的完整范围,就是让所有可见图层都完整地显示出来。

参见 QGIS API Documentation: QgsMapCanvas Class Reference

(九)

// 启动 QgsApplication 实例
return app.exec();

 最后,启动 QgsApplication (即 QApplication)。exec() 方法位于QgsApplication的父类QApplication中,目的是让程序进入主循环。主循环被打断后(如所有窗口关闭),程序结束。

参见官方文档 QApplication Class | Qt Widgets 5.15.14

参考文章 文章页 | mriiiron's blog 

相关文章:

QGIS二次开发三:显示Shapefile

Shapefile 为 OGR 所支持的最重要的数据格式之一&#xff0c;自然可以被 QGIS 加载。那么该如何显示Shapefile呢&#xff1f; 一、先上代码 #include <qgsapplication.h> #include <qgsproviderregistry.h> #include <qgsmapcanvas.h> #include <qgsvec…...

FFmpeg中相关结构体介绍

AVFormatContext&#xff1a;此结构体存储音视频封装格式中包含的信息&#xff0c;并且这个结构体是贯穿整个播放流程的。在这个结构体中主要包含AVInputFormat&#xff0c;AVOutputFormat、AVStream等。 struct AVInputFormat *iformat; // 输入数据的封装格式 AVIOContext *…...

Llama 2 云端部署与API调用【AWS SageMaker】

Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样&#xff0c;你一定会迫不及待地想要亲自动手并用它来构建。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将…...

根文件系统制作

1.官网下载工具 制作工具&#xff1a;busybox https://busybox.net/downloads/ 2.制作根文件系统 2.1准备工作 a.把压缩包放在FSP1M目录下&#xff0c;并解压 2.2正式开始 2.2.1配置交叉编译工具链 1. 打开Makefile文件 2. 修改ARCH &#xff1f;$(SUBARCH) &#xf…...

Linux ARM64架构 动态替换 altinstructions

文章目录 简介一、altinstructions节1.1 .altinstructions1.2 .rela.altinstructions 二、内核模块重定位源码分析参考资料 简介 在内核开发中&#xff0c;有时需要对内核代码进行修补&#xff0c;以解决bug、优化性能或引入新功能。替代指令&#xff08;altinstructions&…...

Mac显示隐藏文件夹

1、设置隐藏文件可见 defaults write com.apple.finder AppleShowAllFiles TRUE 2、killall Finder killall Finder...

使用 Habana Gaudi2 加速视觉语言模型 BridgeTower

&#x1f917; 宝子们可以戳 阅读原文 查看文中所有的外部链接哟&#xff01; 在对最先进的视觉语言模型 BridgeTower 进行微调时&#xff0c;使用 Optimum Habana v1.6&#xff0c; Habana Gaudi2 可以达到 近 3 倍于 A100 的速度。硬件加速的数据加载以及 fast DDP 这两个新特…...

mysql查询语句之实践篇

基础查询语句 完整语法格式如下&#xff1a; select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 -- 创建表 create table stu(id int,name varchar(20),chinese double,english double,math double ); --…...

Linux 和 MacOS 中的 profile 文件详解(二)

上篇文章讲解了 profile 文件的作用、login shell 和 non-login shell 的定义、不同 profile 被 bash shell 在不同情况下的加载顺序和作用&#xff0c;本文讲解一下 zsh shell 相关的知识。 zsh shell MacOS 从 Catalina 版本开始将 zsh 作为默认登录 shell 和交互式 shell。…...

Python之多重继承

一、多重继承 Python支持多重继承&#xff0c;一个子类可以有多个“直接父类”。这样&#xff0c;就具备了“多个父类”的特点。但是由于&#xff0c;这样会被“类的整体层次”搞的异常复杂&#xff0c;尽量避免使用。 class A:def aa(self):print("aa") ​ class B…...

前端CSS文字阴影text-shadow记录

前端CSS文字阴影text-shadow记录 一、文字阴影 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…...

maven 删除下载失败的包

本文介绍了当Maven包报红时&#xff0c;使用删除相关文件的方法来解决该问题。文章详细说明了_remote.repositories、.lastUpdated和_maven.repositories文件的作用&#xff0c;以及如何使用命令行删除这些文件。这些方法可以帮助开发者解决Maven包报红的问题&#xff0c;确保项…...

《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下

1.简介 Fiddler是一款强大的HTTP抓包工具&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。Fiddler提供的功能基本上能…...

网络安全进阶学习第十二课——SQL手工注入3(Access数据库)

文章目录 注入流程&#xff1a;1、判断数据库类型2、判断表名3、判断列名4、判断列数1&#xff09;判断显示位 5、判断数据长度6、爆破数据内容 注入流程&#xff1a; 判断数据库类型 ——> 判断表名 ——> 判断列名 ——> 判断列名长度 ——> 查出数据。 asp的网…...

Zookeeper集群+Kafka集群

目录 一丶Zookkeeper概述 二、Zookeeper 特点 2.1Zookeeper 应用场景 2.2Zookeeper 选举机制 2.2.1第一次启动选举机制 2.2.2非第一次启动选举机制 三、部署 Zookeeper 集群 3.1//安装 JDK 3.2安装 Zookeeper 3.2.1修改配置文件 3.2.2拷贝配置好的 Zookeeper 配置文件…...

管理类联考——逻辑——论证逻辑——汇总篇——目录+提炼

文章目录 一、削弱方法关系的削弱必要方法的削弱因果推理的削弱果因推理的削弱概念跳跃的削弱数量比例的削弱比例因果的削弱 二、支持方法关系的支持必要方法的支持因果推理的支持果因推理的支持概念跳跃的支持数量比例的支持比例因果的支持 三、假设方法关系的假设必要方法的假…...

用excel格式书写的接口用例执行脚本

创建测试用例和测试结果集文件夹&#xff1a; excel编写的接口测试用例如下&#xff1a; 1 encoding 响应的编码格式。所测项目大部分是utf-8&#xff0c;有一个特殊项目是utf-8-sig 2 params 对应requests的params 3 data&#xff0c;对应requests的data 有些参数是动态的&a…...

【flink】Chunk splitting has encountered exception

执行任务报错&#xff1a; Chunk splitting has encountered exception 错误信息截图&#xff1a; 完整的错误信息&#xff1a; 16:30:43,911 ERROR org.apache.flink.runtime.source.coordinator.SourceCoordinator [SourceCoordinator-Source: CDC Sourceorg.jobslink.flink…...

单元测试用例分组 demo

文章目录 目标1、使用 Category 进行用例分组&#xff08;1&#xff09;设置用例组&#xff08;2&#xff09;编写测试类&#xff0c;case设置对应的用例组&#xff08;3&#xff09;编写执行类&#xff08;4&#xff09;查看运行结果&#xff08;5&#xff09;联系项目 2、参数…...

观察者模式(Observer)

观察着模式是一种行为设计模式&#xff0c;可以用来定义对象间的一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模型-视图&#xf…...

20天学会rust(二)rust的基础语法篇

在第一节&#xff08;20天学rust&#xff08;一&#xff09;和rust say hi&#xff09;我们配置好了rust的环境&#xff0c;并且运行了一个简单的demo——practice-01&#xff0c;接下来我们将从示例入手&#xff0c;学习rust的基础语法。 首先来看下项目结构&#xff1a; 项目…...

Stephen Wolfram:嵌入的概念

The Concept of Embeddings 嵌入的概念 Neural nets—at least as they’re currently set up—are fundamentally based on numbers. So if we’re going to to use them to work on something like text we’ll need a way to represent our text with numbers. And certain…...

springboot,swagger多个mapper包,多个controller加载问题

启动类添加MapperScan({"xxx.xxx.xxx.mapper","xxx.xxx.xxx.mapper"}) swagger配置类添加 Bean public Docket api01() {return new Docket(DocumentationType.SWAGGER_2)//.enable(swagger_is_enabl).apiInfo(new ApiInfoBuilder().title("你的title…...

湖大CG满分教程:作业训练四编程题20. 回文串(暴力×动态规划算法√)

问题描述 “回文串”是一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等等就是回文串。给你一个字符串&#xff0c;问最少在字符串尾添加多少字符&#xff0c;可以使得字符串变为回文串。 输入格式 有多组测试数据。 每组测试数据第一行是一个正整数N…...

使用toad库进行机器学习评分卡全流程

1 加载数据 导入模块 import pandas as pd from sklearn.metrics import roc_auc_score,roc_curve,auc from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression import numpy as np import math import xgboost as xgb …...

Python数据容器——列表(list)

数据容器入门 Python中的数据容器&#xff1a; 一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为1个元素 每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 数据容器根据特点的不同&#xff0c;如&#xff1a;是否支持重复元…...

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录

Linux CEF&#xff08;Chromium Embedded Framework&#xff09;源码下载编译 背景 由于CEF默认的二进制分发包不支持音视频播放&#xff0c;需要自行编译源码&#xff0c;将ffmpeg开关打开才能支持。这里介绍的是Linux平台下的CEF源码下载编译过程。 前置条件 下载的过程非…...

Adaptive AUTOSAR—— Communication Management 3.1

9 Communication Management 9.1 What is Communication Management? 通信管理是自适应平台架构中的一个功能集群。 作为一个功能集群,通信管理向应用程序提供了一个C++ API,实现了面向服务的通信。服务是一个由应用程序提供的功能单元,可以在运行时被另一个应用程序动态…...

VMnet0 桥接设置

VMnet0 一定要设置为你的硬件物理网卡&#xff0c;不能设置自动&#xff0c;不然后&#xff0c;网线一断&#xff0c;就再也连不上了。必须重启电脑才能连上&#xff0c;这个问题找了很久才找到。 下面有个hyper-V虚拟网卡&#xff0c;如果选自动的话&#xff0c;物理网卡一掉…...

Sublime Text 4 Build 4151 4152 发布及注册方法

Sublime Text 是一个商业代码编辑器。它原生支持许多编程语言和标记语言&#xff0c;用户可以通过插件来扩展它的功能&#xff0c;这些插件通常是由社区建立的&#xff0c;并以自由软件许可证的形式维护。为了方便插件&#xff0c;Sublime Text 有一个 Python API。 Sublime T…...