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

在QGIS中给矢量数据属性编号的一种方法

目录

写在文章前

一、给要素编号用哪些功能

二、实现一个最简单的编号

1.数据准备

2.编辑字段计算器表达式

3.查看编号结果

三、更加复杂的编号

1.使用UUID编号

2.根据单个属性排序后编号

3.根据多个属性排序后编号

4.拼接字符串进行编号

5.根据时间编号及实现


写在文章前

众所周知,在社会中存在着各种编号,如:邮政编码、订单编号、身份证号等,这些编号大多用于对事物进行科学地辨识。在地理空间数据中,空间数据不仅存在空间信息,还有属性及时间信息。对于矢量数据文件,其大多是以“表”的形式存在,也就是说矢量数据的每个要素(每行记录)都是可以被编号的。

本文将从怎么利用QGIS的功能对其所能管理的矢量数据进行编号,文中所列举的例子可能不太符合实际情况,但是例子中用到的方法是可以适用于各类与空间信息有关的调查项目中需要编号的场景。

一、给要素编号用哪些功能

给要素编号的本质是给要素的某一个属性赋值,所赋予要素的值是符合编号规则的字符串(数据类型是字符串型)。在QGIS中,常见的给属性赋值的功能为字段计算器,除此之外也有使用python脚本、工具箱、插件的方式来给要素的某一个属性赋值。QGIS的字段计算器提供了丰富的函数,利用好这些函数就可以生成各种各样的符合需求的编号。这使得QGIS在数据生产中有一定优势。

在读取常见的shapefile、kml、geojson、gml等常见矢量文件同时,QGIS也可以读取Excel、csv等格式的文件为“图层”,也就是说,无空间信息的纯属性数据也可以通过QGIS来编辑

二、实现一个最简单的编号

通常我们编号是根据事先规定好的编码规则进行的,所以编号前需要先根据编码规则分析一下使用哪些函数来实现编码规则。

在本节,我们使用最简单的编号规则(4位顺序号)来演示一下有关功能。

1.数据准备

单击主菜单【图层】【创建图层】【新建临时图层】,创建一个包含“ID”和“Name”属性的无几何图形临时图层文件。这里创建无几何图形的图层是为了简化操作,省去给空间数据赋值的过程。

数据创建入口

 无几何图形临时图层的配置

 使用添加要素按钮给10个要素,给Name填写十个随机名字,也可以不写。

2.编辑字段计算器表达式

在属性表单击字段计算器按钮,打开字段计算器。

在字段计算器表达式窗口输入以下表达式: 

lpad(@id,4,0)

注意不要勾选仅更新1个所选要素 

3.查看编号结果

 可以发现,已经将ID属性赋值为4位数字长度的顺序号。

三、更加复杂的编号

1.使用UUID编号

使用uuid编号实现比较简单,只需要打开字段计算器,在表达式框中输入以下表达式,运行即可。

 uuid( 'WithoutBraces' )

几种变式:

不带短横,如:c2f4bed53daf4498b7216ea155a08d2b

replace(  uuid( 'WithoutBraces' ),'-','') 

不带短横、大写,如:83397DED76A348838298C2351FEB9FC0

upper( replace(  uuid( 'WithoutBraces' ),'-','') )

2.根据单个属性排序后编号

由于字段计算器提供的函数无法直接给要素排序。但我们可以通过工具箱对属性排序,排序后,要素的“@id“变量会根据排序有所改变。下面还是使用上述数据,根据属性排序编号。

在主菜单找到:

【数据处理】【工具箱】【矢量通用工具】【按表达式排序(Order by expression)】

选中数据图层,表达式选择Name(即根据Name属性的排序),勾选升序排序(不勾选则为降序排序)。

打开字段计算器,使用第二节的表达式对ID字段进行更新。

从数据列表中可以看到ID已经修改为按照Name升序排序的4位序列号。 

上图是ID已经修改为按照Name倒序排序的4位序列号。

3.根据多个属性排序后编号

根据多个属性进行排序有多种方法。

方法一:

利用排序工具中的表达式,拼接多个字段,但这种方式的灵活性相对低一点,不能实现多个属性按各自的规则(升序、倒序)进行组合。

方法二:

我们可以使用【执行SQL语句】(executesql)工具对图层要素进行排序,这样可以实现多个属性按各自的规则(升序、倒序)进行组合。这种方式需要对SQL语句有一定了解。

这里我们介绍一下方法二:

首先准备数据,还是利用上述图层,在其基础上再加一个School属性。描述人物所属的学校

 打开工具箱,进行如下配置:

在附加输入的数据源选中需要处理的图层。

在SQL查询中输入以下SQL语句:

select * from input1 order by School desc,Name asc

以上SQL的意思为根据School排倒序,在根据School排序的基础上,School属性一样的要素再根据Name排升序。

 在几何图形类型选择没有几何图形。单击运行。

 上图是运行成果,可以看到排序效果。

在上述基础上,再次运行lpad(@id,4,0)表达式,得出以下结果。

如果需要对每个学校单独进行编号,可以用执行SQL的方式实现。

在执行SQL工具中,输入以下SQL语句,选择无几何图形,单击运行。

SELECT CONCAT(School,LPAD((ROW_NUMBER() OVER(PARTITION BY School ORDER BY Name)),4,'0')) AS ID,Name,School
FROM input1
ORDER BY Name ASC;

 以下是执行结果:

4.拼接字符串进行编号

在实际情况中,对事物的编号,不仅只有序列号,还有特征码,组织机构信息等等,出于便于管理的需要,编号时通常会拼接一些字符串来生成编号。用QGIS实现拼接字符串编号通常不难。在业务不复杂的情况下,只需要使用字段计算器的拼接功能就可以实现,对于复杂一些的可以通过SQL语句、python脚本实现,第三小结的最后一个例子就是一种使用SQL的情况。

假设有这样一份数据:

stuffNo为员工编号,type为学校代码,School为学校名称,Name为姓名。

假设现在要生成一个全市学校职工的名单,那么可以拼接学校代码和员工代码实现最简单的全是学校职工编号。

在字段计算器中拼接字段即可,拼接符号为”||“

效果如下:

5.根据时间编号及实现

假如有这样一分外卖订单数据,拥有订单号、订单名称,下单时间等等属性信息,送货地址数据为空间信息,这样的数据就是一份典型的地理空间数据。

输入以下公式:

 format_date( "CreateTime",'yyyyMMdd')||lpad(@id,8,0)

 效果如下:

相关文章:

在QGIS中给矢量数据属性编号的一种方法

目录 写在文章前 一、给要素编号用哪些功能 二、实现一个最简单的编号 1.数据准备 2.编辑字段计算器表达式 3.查看编号结果 三、更加复杂的编号 1.使用UUID编号 2.根据单个属性排序后编号 3.根据多个属性排序后编号 4.拼接字符串进行编号 5.根据时间编号及实现 写在…...

对一个变速器原理的分析

背景 原本是朋友在调试一个看起来比较新的变速器驱动,整体来说支持两种变速模式,一种是进程级,这种用了HOOK,中规中矩的实现,原理网上都有。另一种是”系统级内核全局变速“,这个模式初步看了下有些特殊&a…...

秒验:可以自定义UI的一键登录服务

一键登录如今成为越来越多移动应用的首选,但千篇一律的登陆界面在引发用户担忧其安全性的同时,也容易让用户在不同APP切换时产生误解。因此,由国内知名移动应用开发服务商MobTech打造的一键登录工具——秒验,通过允许开发者自定义…...

pmm最新版本v2.40.0尝鲜体验

1 概述 PMM 是一款免费开源的企业级的数据库监控工具,可用来监控 MySQL、MongoDB 和 PostgreSQL 等数据库。除了指标监控,针对MySQL还具备SQL语句的性能监控。 官方地址是https://docs.percona.com/percona-monitoring-and-management,最新版…...

2023年中国数据存储市场现状及发展前景预测分析

中商情报网讯:当前,新一代信息技术快速发展推动信息产业发生了重大变革,数据存储行业将很快成为信息领域一个重要的产业分支。生成式人工智能催生算力需求,各种新兴应用场景对数据存储的容量、效率、流动性和安全性等方面提出了更…...

xlsx冻结单元格

说明 因为最近需要实现前端导出 excel 文件,并且对导出文件的样式进行一些修改,比如颜色、字体、合并单元格等,所以我找到了xlsx-style这个项目,它可以对导出的 excel 文件进行一些样式上的修改,这个项目是SheetJs的一…...

yolov8剪枝实践

本文使用的剪枝库是torch-pruning ,实验了该库的三个剪枝算法GroupNormPruner、BNScalePruner和GrowingRegPruner。 安装使用 安装依赖库 pip install torch-pruning 把 https://github.com/VainF/Torch-Pruning/blob/master/examples/yolov8/yolov8_pruning.py&…...

功能基础篇6——系统接口,操作系统与解释器系统

系统 os Python标准库,os模块提供Python与多种操作系统交互的接口 import os import stat# 文件夹 print(os.mkdir(r./dir)) # None 新建单级空文件夹 print(os.rmdir(r./dir)) # None 删除单级空文件夹 print(os.makedirs(r.\dir\dir\dir)) # None 递归创建空…...

由于导线材质不同绕组直流电阻不平衡率超标

实测证明, 有的变压器绕组的直流电阻偏大, 有的偏差较大, 其主要原因是某些导线的铜和银的含量低于国家标准规定限额。 有时即使采用合格的导线, 但由于导线截面尺寸偏差不同, 也可以导致绕组直流电阻不平衡率超标。  …...

选择智慧公厕解决方案,开创智慧城市公共厕所新时代

在城市建设和发展中,公厕作为一个不可或缺的城市基础设施,直接关系到城市形象的提升和居民生活品质的改善。然而,传统的公厕存在着管理不便、卫生状况差、设施陈旧等问题。为了解决这些困扰着城市发展的难题,智慧公厕源头厂家广州…...

FFmpeg 基础模块:AVIO、AVDictionary 与 AVOption

目录 AVIO AVDictionary 与 AVOption 小结 思考 我们了解了 AVFormat 中的 API 接口的功能,从实际操作经验看,这些接口是可以满足大多数音视频的 mux 与 demux,或者说 remux 场景的。但是除此之外,在日常使用 API 开发应用的时…...

代数——第3章——向量空间

第三章 向量空间(Vector Spaces) fmmer mit den einfachsten Beispielen anfangen. (始终从最简单的例子开始。) ------------------------------David Hilbert 3.1 (R^n)的子空间 我们的向量空间的基础模型(本章主题)是n 维实向量空间 的子空间。我们将在本节讨论它。…...

2023年软考网工上半年下午真题

试题一: 阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。 [说明] 某企业办公楼网络拓扑如图1-1所示。该网络中交换机Switch1-Switch 4均是二层设备,分布在办公楼的各层,上联采用干兆光纤。核心交换…...

Flutter 直接调用so动态库,或调用C/C++源文件内函数

开发环境 MacBook Pro Apple M2 Pro | macOS Sonoma 14.0 Android Studio Giraffe | 2022.3.1 Patch 1 XCode Version 15.0 Flutter 3.13.2 • channel stable Tools • Dart 3.1.0 • DevTools 2.25.0 先说下历程,因为我已经使用了Flutter3的版本,起初…...

elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

目录 3.RestClient查询文档3.1.快速入门3.1.1.发起查询请求3.1.2.解析响应3.1.3.完整代码3.1.4.小结 3.2.match查询3.3.精确查询3.4.布尔查询3.5.排序、分页3.6.高亮3.6.1.高亮请求构建3.6.2.高亮结果解析 4.旅游案例4.1.酒店搜索和分页4.1.1.需求分析4.1.2.定义实体类4.1.3.定…...

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制 AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议 ★ RabbitMQ的核心概念 Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。 Channel: 连接内部的Channel。 Exch…...

系统架构设计:18 论基于DSSA的软件架构设计与应用

目录 一 特定领域软件架构DSSA 1 DSSA 2 DSSA的基本活动和产物 (1)DSSA的基本活动和产物...

Android原生实现控件outline方案(API28及以上)

Android控件的Outline效果的实现方式有很多种,这里介绍一下另一种使用Canvas.drawPath()方法来绘制控件轮廓Path路径的实现方案(API28及以上)。 实现效果: 属性 添加Outline相关属性,主要包括颜色和Stroke宽度&…...

ROS学习笔记(六)---服务通信机制

1. 服务通信是什么 在ROS中,服务通信机制是一种点对点的通信方式,用于节点之间的请求和响应。它允许一个节点(服务请求方)向另一个节点(服务提供方)发送请求,并等待响应。 服务通信机制在ROS中…...

常见的C/C++开源QP问题求解器

1. qpSWIFT qpSWIFT 是面向嵌入式和机器人应用的轻量级稀疏二次规划求解器。它采用带有 Mehrotra Predictor 校正步骤和 Nesterov Todd 缩放的 Primal-Dual Interioir Point 方法。 开发语言:C文档:传送门项目:传送门 2. OSQP OSQP&#…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...