打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【转载】QGIS 3.16表达式变量大全(建议收藏)
userphoto

2022.05.17 江苏

关注

GISer last 2022-05-17 14:18

以下文章来源于QGIS课堂 ,作者吴建玲

QGIS课堂“QGIS课堂”视自身为一座桥梁,在分享领先业界的开源QGIS技术、经验、感悟的同时,希望能与广大GIS从业者、GIS专业教师及学生携手,深度参与国际QGIS开源社区工作,为QGIS产品的日臻完善和在世界范围内的广泛普及给出来自中国的贡献。

QGIS表达式中所使用的变量为符号化参数的设置、查询构建和数据更新等领域提供了“令人兴奋的各种可能性(the exciting possibilities variables unlock)”。表达式虽然强大,但目前缺乏系统的资料,中文资料更是少之又少,学习曲线非常陡峭,使得大多数人对其望而却步。

本文按照变量的作用域,从全局变量开始,逐级展开,力图提供变量使用说明的同时,更突出变量的使用范围和上下文环境,以帮助进一步理解变量的使用方法和注意事项。

QGIS中的变量遵从层级结构,类似css的继承规则,根据作用范围的大小,变量可以分为全局变量、工程变量、地图变量、图层变量、打印布局变量、地图集变量、上下文变量等。

本文在整理时,力求全面覆盖QGIS目前所有变量,然而,由于变量使用范围广泛,不仅QGIS核心可以定义变量,第三方提供的插件和算法也可以根据需要定义与自己插件或算法相关的变量,所以,本文难以做到100%全部覆盖。另外,在撰写说明的过程中,由于水平有限,难免存在理解不到位的地方,希望大家发现时不吝指正。

如果想进一步了解表达式相关知识,可以扩展阅读以下几篇推文:

  • 全局变量(global variables)

全局变量在整个QGIS程序范围内均可以用于构建表达式,且其变量取值相同。例如对于全局变量“@qgis_os_name”,无论是在更新字段时,还是在筛选要素时,打开表达式构建器,都能看到变量列表中存在该变量,且取值均为当前操作系统名称,即“windows”。

全局变量的查看和设置方法为:点击菜单【设置】->【选项】,打开全局选项设置对话框,切换到【变量】标签页,可以看到QGIS所有的全局变量,也可以在此处点击下方的【+】添加自定义全局变量。

变量名

说明

举例

qgis_locale

QGIS当前使用的本地化语言环境

中文为'zh-Hans'

qgis_os_name

操作系统名称

 'windows’, 'linux’ 或   'osx’

qgis_platform

QGIS产品平台

 'desktop’或 'server’

qgis_release_name

当前QGIS发行版名称

'Hannover'(版本名通常为召开社区会议的地点名称)

qgis_short_version

当前QGIS版本号

'3.16'

qgis_version

当前QGIS版本字符串,由版本号+发行版名称组成

'3.16.7-Hannover'

qgis_version_no

当前QGIS内部版本号

31607

user_account_name

当前用户的操作系统账户名称


user_full_name

当前用户的操作系统用户名(若可用)


  • 工程变量(project variables)

工程变量是一系列与工程设置有关的变量集合,在本工程范围内均可使用。点击菜单【工程】->【属性…】,打开属性对话框,切换到【变量】标签页,即可看到当前所有变量及其取值,也可以在属性对话框点击下方的【+】添加自定义的工程变量。

变量名

说明

举例

project_abstract

工程描述信息,读取自工程元数据,可在工程属性中设置,默认为空

'’

project_area_units

工程面积单位,用于计算几何面积

'平方米'

project_author

工程的作者信息,读取自工程元数据,可在工程属性中设置

'吴建玲'

project_basename

当前工程文件的基本名称(不包含文件路径和扩展名)

'sheng-2015-pop'

project_creation_date

当前工程的创建日期,读取自工程元数据,Datetime型

<日期时间:2021-06-10   12:10:44>

project_crs

工程的坐标参照系代号

'EPSG:3857'

project_crs_arconym

工程坐标参照系的缩写

'merc',等同于坐标参照系'EPSG:3857'

project_crs_definition

工程坐标参照系的完整定义,目前返回Proj4格式


project_crs_description

工程坐标参照系的名称

'WGS 84 / Pseudo-Mercator'

project_crs_ellipsoid

工程坐标参照系的椭球体代码

'EPSG:7030'

project_crs_proj4

Proj4格式的工程坐标参照系


project_crs_wkt

WKT (well known text)格式表示的工程坐标参照系


project_distance_units

当前工程的长度单位,用于计算长度

'米’

project_ellipsoid

当前工程的椭球体,在计算大地测量面积和大地测量几何图形长度时使用

'PARAMETER:6378245:6356863.01877304725348949'

project_filename

当前工程文件名,包含扩展名

'sheng-2015-pop.qgz'

project_folder

当前工程的文件夹路径

'E:\temp\Sheng_POP'

project_home

当前工程的根目录,通常与工程文件目录相同,可以在浏览器面板(Browse   Panel)中设置

'E:\temp\Sheng_POP'

project_identifier

工程标识符,读取自工程元数据,默认为空字符串


project_keywords

工程关键字,读取自工程元数据,字典型(dict),默认为空


project_last_saved

工程最后保存的日期/时间,Datetime型

<日期时间:2021-06-10   12:10:44>

project_path

当前工程的完整路径,包含文件名和扩展名


project_title

工程标题,读取自工程元数据,默认为空字符串


project_units

工程坐标参照系的单位

'米'

  • 图层变量(layer variables)

当QGIS主窗口加载了图层(地图数据)后,可以在符号化设置、要素选择和属性表操作中看到图层变量,图层变量的作用范围与该图层的存在周期相同。

在图层面板中右键点击图层->【属性】,切换到【变量】标签页,即可看到当前图层变量及其取值。点击下方的【+】按钮可以添加自定义图层变量。

变量名

说明

举例

layer

当前激活的图层对象

<地图图层>

layer_id

当前激活图层的ID

'sheng_POP_f3dd262a_182c_4553_967a_e5b5a8f2dfd4'

layer_ids

当前工程打开的所有图层ID数组,数据类型为list

如[   'OpenStreetMap_e2f701ac_8687_43c2_b7bf_e01aec5e9937', 'n… ]

layer_name

当前激活图层的图层名

'sheng_POP'

layers

当前工程打开的所有图层数组,数据类型为list

[ <地图图层> ]

  • 打印布局(layout variables)

通过点击菜单【工程】->【新建打印布局】,可进入打印布局窗口。打印布局相关的变量位于【布局】标签页的下方,在整个打印布局窗口中均可使用。

具体变量的含义为:

变量名

说明

举例

layout_dpi

打印分辨率 (DPI),默认为300DPI


layout_name

打印布局名称

'布局1'

layout_numpages

打印布局总页数

1

layout_page

打印布局中当前项的页码

2

layout_pageheight

打印布局中当前页面的高度(以mm为单位)

841

layout_pagewidth

打印布局中当前页面的宽度(以mm为单位)

1189

  • 地图集(atlas variables)

在打印布局窗口,点击菜单【地图集】->【地图集设置】,将在右侧打开地图集设置面板,勾选“生成地图集”复选框后,点击表达式按钮,即可看到一些列以“atlas”开头的变量,此为地图集设置相关变量,其作用范围是:启用“生成地图集”选项后方可以使用。

变量名

说明

举例

atlas_feature

当前地图集要素 (数据类型:feature 对象)

'<要素:-9223372036854775808>’

atlas_featureid

当前地图集要素ID

2

atlas_featurenumber

当前地图集要素数量

4

atlas_filename

如果输出地图集,当前地图的输出文件名

'output_4'

atlas_geometry

当前地图集要素几何图形对象


atlas_layerid

创建地图集所使用的图层ID

'sheng_POP_f3dd262a_182c_4553_967a_e5b5a8f2dfd4'

atlas_layername

当前地图集所使用的图层名

'sheng_POP'

atlas_pagename

当前地图集的页面名称,显示在页面左上角

'吉林'

atlas_totalfeatures

地图集中要素总数量

4461

  • 打印布局元素(layout item variables)

当空白的打印纸张添加了布局元素,即可使用布局元素相关变量访问其属性,因此,布局元素变量的使用范围是:布局元素存在的周期均可使用。

变量名

说明

举例

item_id

打印布局中布局元素的ID,不强制取值唯一

'地图 2'

item_uuid

打印布局中布局元素的UUID,全局唯一

'{dd0427db-020b-4c2f-a34f-938ec58b390b}'

  • 网格(grid variables)

在打印布局窗口中选中地图后,添加网格,即可访问网格设置相关的变量。

变量名

说明

举例

grid_axis

返回当前网格注记的坐标轴

x为经度,y为纬度

grid_number

网格注记文字内容


  • 图例(legend canvas item variables)

在打印布局添加图例(lengend)元素后,图例相关变量即可访问使用。

变量名

说明

举例

legend_column_count

图例的列数,默认是1


legend_filter_by_map

图例内容是否按地图过滤,布尔型,默认为false,表示不过滤


legend_filter_out_atlas

图例内容是否按地图集要素范围过滤,布尔型,默认false,表示不过滤


legend_split_layers

是否允许将图层中的图例分割为多个列,默认不分割。


legend_title

图例标题


legend_wrap_string

用于控制图例文字换行的字符

例如,换行符为':’,那么当图例的文字中有':’,则替换成换行

  • 地图设置(map settings item variables)

地图主窗口激活且有图层数据时,地图相关变量可以在构建表达式时使用。

变量名

说明

举例

map_crs

地图的坐标参照系

“EPSG:4326”

map_crs_acronym

当前地图参照系CRS的缩写

 'merc'

map_crs_definition

当前地图参照系的完整定义

'+proj=merc +a=6378137   +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +…'

map_crs_description

地图坐标参照系全称

'WGS 84 / Pseudo-Mercator'

map_crs_ellipsoid

当前地图坐标参照系的椭球体缩写

'EPSG:7030'

map_crs_proj4

Proj4格式定义的地图坐标参照系

'+proj=merc +a=6378137   +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +…'

map_crs_wkt

WKT格式定义的当前地图坐标参照系


map_extent

返回地图当前范围的几何图形,通常为当前地图窗口的矩形


map_extent_center

当前地图中心点


map_extent_height

以地图单位表示的当前地图高度


map_extent_width

以地图单位表示的当前地图宽度


map_id

地图ID,对于地图主窗口,ID为'canvas’,对于打印布局中的地图,则地图ID等于地图元素ID(item ID)


map_layer_ids

地图中可见图层的ID字段列表


map_layers

地图中可见图层对象列表


map_rotation

地图旋转角度,默认为0,由状态栏中“旋转角度”参数控制


map_scale

当前地图比例


map_units

地图量算单位


  • 属性表(attribute table variables)

打开图层对应属性表,使用表达式过滤要素或者使用字段计算器,即可看到属性表相关的变量。

变量名

说明

举例

row_number

当前行号,在属性表中可见

1

  • 符号(symbol variables)

符号相关变量用于控制或者获取符号化相关的参数。在【图层样式】->【符号化】->【图层符号】(symbol layer),选择调整符号图层的任意属性,使用【由数据定义重载】打开表达式构建对话框即可看到。

变量名

说明

举例

symbol_angle

用于渲染要素的符号角度(仅适用于标记符号(Marker symbol))


symbol_color

渲染要素所使用的符号颜色


symbol_count

在布局图例中显示该符号渲染的要素数量


symbol_id

符号的内部标识符(ID),仅在布局图例中可见


symbol_label

符号标签,通常为用户输入,用于说明该符号代表的要素情况,默认系统自动生成与地图主窗口中的图层图例一致


symbol_layer_count

一个符号所包含的符号图层(symbol layer)的总数


symbol_layer_index

当前符号图层索引值


symbol_marker_column

点的列号(仅对点图案填充有效)


symbol_marker_row

点的行号(仅对点图案填充有效)


  • 地理处理(processing variables)

在模型构建器中,可以使用地理处理相关变量构建表达式。

变量名

说明

举例

algorithm_id

处理工具箱中的算法唯一标识符(ID)


model_path

当前模型的完整路径(包括文件名,若模型嵌在工程中则为工程的完整路径)

'/home/wujl/文档/qgis-model/mymodel.model3'

model_folder

包含当前模型的文件夹(如果模型嵌入到工程中,则为工程文件夹)

'/home/wujl/文档/qgis-model'

model_name

当前模型的名称,不含路径和扩展名

'mytestmodel'

model_group

当前模型的群组

'custom'

fullextent_maxx

当前画布范围最大x值(包括所有图层)。如,180(度,地理坐标系)

180

fullextent_maxy

当前画布范围最大y值(包括所有图层)(如,90度,地理坐标系)

90

fullextent_minx

当前画布范围最小x值(包括所有图层)。如,-180(度,地理坐标系)

-180

fullextent_miny

当前画布范围最小y值(包括所有图层)。如,-90(度,地理坐标系)

-90

  • 时态(temporal variables)

点击【工具栏】->【时态】按钮,启用时态控件后,相关变量即出现在表达式构建对话框的变量列表中。

变量名

说明

举例

animation_start_time

动画开始时间 (数据类型:datetime)

'<日期时间:2021-06-09   02:00:00>

animation_interval

动画持续总时长,通过animation_end_time减去animation_start_time得到,(数据类型:interval值,时间间隔单位可以为:年、月、周、天、小时、分钟或秒)

'<间隔:8.08333天>

animation_end_time

动画结束时间 (数据类型:datetime)

'<日期时间:2021-06-01   00:00:00>

frame_duration

每个动画帧的持续时间(数据类型:interval)


frame_number

动画播放期间当前帧编号


frame_rate

动画播放期间每秒的帧数


map_end_time

在时态动画中地图结束显示的时间,数据类型为Datatime,超过该时间点,当前地图将不显示


map_interval

在时态动画中,地图持续显示的时间间隔,数据类型为:interval(时间间隔)


map_start_time

在时态动画中地图开始显示的时间,数据类型为Datatime,超过该时间点且在结束时间之前,地图处于可见状态


  • 表单上下文变量(form context variable)

在属性表中选择要素、添加/编辑要素、查询要素时,跟数据库一样,QGIS程序需要维护一个当前记录的指针,用表单上下文变量来表示。

右键点击图层打开图层【属性】->【属性表单】->【表达式】可以看到对应变量。

变量名

说明

举例

current_feature

表示当前正在表单或表格行中编辑的要素,可以在表单/行上下文中用于过滤相关要素。


current_geometry

表示表单或表格行中当前正在编辑的要素的几何图形,可以在表单/行上下文中用于过滤相关要素。


form_mode

表单的用途,例如AddFeatureMode,SingleEditMode,MultiEditMode,SearchMode,AggregateSearchMode或IdentifyMode作为字符串。


以上为QGIS表达式中变量的相关说明,希望对大家使用QGIS表达式有所帮助。


版权声明

本文欢迎转载,转载时请注明出处。

确定

  • 不看此公众号

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
三国时期地图集
FreeMarker语法之表达式(二)
Oracle PL/SQL开发入门(第五弹:运算符和表达式)
如何将变量存储在指定内存地址(基于Keil MDK-ARM)
民国地图集
实用地图集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服