python symbol函数展开_QGIS表达式中的函数

编程语言中的函数,与数学函数的定义大不相同。在计算机领域,函数是指一段可以直接被另一段程序或代码引用的程序或代码,也叫做子程序(subroutine)、过程(procedure)、方法(method)。

函数在QGIS表达式构建过程中起到重要作用,表达式实际上是函数作用于常量与变量后得到的结果,可以说,函数是表达式的灵魂。

 01 

内置函数与自定义函数

QGIS表达式中的函数分为内置函数和自定义函数两大类。

内置函数是QGIS系统自带的函数,用户可以在表达式构建过程中调用内置函数,但是不能修改其中的代码。

自定义函数是由用户通过Python语言编写的代码片段,可以根据个性化需求对函数功能进行设计与修改,为用户提供更强大而灵活的定制能力。

  • 系统内置函数

QGIS内置函数分成约20个分组,包括地图、地图图层、记录和属性、时间和日期、数学、数组、条件等。每个分组下所包含的函数数量如下: 

ef11189d8f555032354951e6a7f38091.png

  • 自定义函数

在表达式构造器中切换到【函数编辑器】标签,可以看到自定义函数编辑区由左边的函数列表、右上的函数代码编辑器和右下的帮助区域组成。

默认情况下,函数列表只有一个default函数,是系统提供的自定义函数模版。右侧函数代码编辑器给出了样例代码,提供了导入QGIS模块、自定义函数存储的分组以及函数体代码的参考。

05441071fa618fb34963f44ff5874d9d.png

点击左下角的【+】按钮,在弹出的对话框输入存储的文件名,即可新增自定义函数。

50560dda39df27c73f5fb18fadbab3e2.png

通常情况下,自定义函数首先需要使用import语句导入引用的Python库,然后设计和编写函数实现代码,例如在函数代码编辑器输入下面的代码:

import mathfrom qgis.core import *from qgis.gui import *@qgsfunction(args=0, group='Custom', usesgeometry=True)def GetUtmZone(value1, feature, parent):    """以字符串形式返回几何图形所属的UTM区"""    centroid = feature.geometry()    longitude = centroid.asPoint().x()    latitude = centroid.asPoint().y()    zone_number = math.floor(((longitude + 180) / 6) % 60) + 1    if latitude >= 0:        zone_letter = 'N'    else:        zone_letter = 'S'    return '%d%s' % (int(zone_number), zone_letter)

该函数的主要功能是计算要素所处的UTM投影分度带,返回以‘N’或者‘S’结尾的投影分度带字符串。

ee0c1365d95a6f00a9e0373161766dae.png

点击右下角的【保存并载入函数】按钮,将该函数保存,并载入到表达式构造器对应的分组中。此时调出表达式构造器对话框,可看到上述自定义函数出现在custom分组中,双击该函数即可完成函数调用。

62c5f550f2280cd29f30c7384da7aa8e.png

自定义函数能根据需求进行设计和代码编写,为函数的使用提供了更多的可能性,由于涉及到Python编程语言,其使用方式也更加复杂,QGIS官方文档有大量篇幅对这方面进行了详细介绍,感兴趣的朋友可以到QGIS官网查阅相关文档。

 02 

查找函数

在表达式构造器中,函数以分组方式在树形结构中列出。如果对函数的分组比较熟悉,大致了解自己所需要的函数属于哪个分组,可以直接展开分组找到该函数。如果知道函数的名字,可以在选择区上方搜索框中输入函数的名字进行快速查找。

dc9b642c8bb311b2ec8da37baa94354d.png

 03 

使用函数

双击函数,即可将其添加到代码输入区中。表达式代码编辑器支持参数提示和自动补全功能:输入函数的前几个字母,编辑器将会提示与其匹配的函数名,使用tab按键将实现自动补全。

QGIS中的函数支持命名参数,即在使用函数时,参数的传入可以用命名参数。命名参数可以忽略参数的顺序,方便函数的使用,尤其是参数比较多的情况时,用参数名称和参数值同时出现的方法,可以提高代码的可读性。

例如clamp函数可以实现将输入值限定在指定的范围内,需要三个参数:min,范围最小值;max,范围最大值;value,输入值。默认情况下,clamp函数的参数调用顺序为:clamp(min,value,max),例如,在表达式编辑区写入代码:clamp(1,5,10),可以实现将输入值限定在[1,10]范围,当前输入值为5,因为在[1,10]范围内,函数返回输入值本身,即5。用命名参数调用的方式为:clamp(min:=1,max:=10,value:=5),注意到,参数的顺序并未按照默认顺序给出,而表达式引擎也正确地返回计算结果。

a073631f263f051231b2b56726d6b9dd.png

 04 

常用函数

QGIS表达式中的函数将近300个,在表达式构建中正确地使用函数可达到事半功倍的效果。由于篇幅所限,本文不能将函数一一详解,根据函数的常用程度,选择约30个函数并对其进行详细说明。其他函数的用法可以在表达式构造器的帮助文档中获取。

e49377822f448e56fd998733978ef481.png

 05 

函数典型应用

1.

darker(@symbol_color,130)

该函数来自《QGIS 3.10矢量样式设置》,用于设置发电厂点要素的描边颜色。darker是颜色函数,返回更暗的颜色字符串。@symbol_color是当前几何图形的渲染颜色,130是暗化因子相对应的整数。该函数实现如下功能:返回比@symbol_color暗30%的颜色值。

2.

maximum("passengers", group_by:="station_class")

maximum是聚合函数,返回字段或者表达式的最大值。"passengers"是属性表中的旅客数量字段,"station_class"是站点类型字段。该函数实现如下功能:按照站点类型分组,返回最大旅客数量。

3.

buffer( $geometry, 10 )

buffer为几何图形函数,实现按照给定半径返回几何图形的缓冲区,$geometry表示当前选中的几何图形,10为缓冲半径,其单位与地图单位相同。

4.

to_date('2020-07-29')

to_date是日期函数,实现将一个字符串转换成日期对象。传入参数代表不同日期形式的字符串,其支持的格式可参考QGIS的相关文档,默认情况下,日期字符串为短横线连接,年份由4位数字表示,月份由2位数字表示,日期用2位数字表示,形如'2020-07-29'。

5.

format_date(now(),'yyyy-MM-dd')

format_date是字符串函数,实现格式化日期字段,返回一个自定义的字符串格式。now()是日期函数,返回当前日期和时间。该表达式的输出结果是短横线连接的当前日期字符串,如:‘2020-07-29’。

 06 

小结

本文试图从系统内置函数、自定义函数、函数的使用和查找、常用函数说明和函数典型应用等方面,探讨对QGIS表达式中的函数理解。QGIS表达式中的函数种类繁多,使用方法灵活多变,本文仅为抛砖引玉之作,如果有理解偏差,欢迎指正。

吴建玲

2020年7月30日


版权声明

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

c773334a6ff81d48999017249b3d23b7.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

layui 金额数据千分位_IG神秘打野韩服数据,盲僧数据或暗示英雄池问题

在LPL春季赛结束,而夏季赛还未开始的这段时间,是LPL各大战队能够利用的宝贵时间。为了备战S10,有一些队伍确实需要引援。而在这次转会期期间,率先出现转会传闻的是IG战队。据传IG打野Leyan有离队的可能,同时IG也在积极…

python设计模式pdf_精通Python设计模式 高清晰PDF+源码

精通Python设计模式讲述了16种基本设计模式,轻松解决软件设计常见问题;借力高效的Python语言,用现实例子展示各模式关键特性。 本书用实际生活中的例子带你了解常用的设计模式,介绍了诸多有关编写Python风格代码的底层细节和概念&…

datanode无法启动_Hadoop DataNode启动和初始化过程

简介我们先看DataNode的doc文档的介绍,DataNode是一个类,用于存储一组块,用于DFS部署。单个部署可以有一个或多个DataNode。每个DataNode通信定期与单个NameNode进行通信。它还可以与客户端和其他的DataNodes通信。DataNode存储一系列命名的块…

挖掘机燃料_2020广东挖掘机工程机械出租公司合作共赢

如今的挖掘机具有比以往更多的内置安全功能,但这并不意味着只有任何人都可以爬上驾驶室并安全操作。1、仔细检查地面区域使用挖掘机时,诸如岩石、建筑材料和树桩之类的物品会损害安全性。在开始操作机器之前,请确保已将其从该区域中清理。此外…

mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

添加和删除列使用ADD向表中添加新列,使用DROP删除现有列。DROP col_name是对标准SQL的MySQL扩展。若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFTER col_name。默认情况是添加到最后。如果表只包含一列,则不能删除该列。如果您想…

ant构建项目迁移到gradle_Gradle构建工具

构建工具的作用:依赖管理;测试、打包、发布;机器能干的活,绝不自己动手。主流构建工具:(1)Ant:编译、测试、打包;(2)Maven:依赖管理、发布;(3)Gradle:Groovy&…

mysql导入数据库某张表_MSSQLServer2005 导出导入数据库中某张表的数据

备注:在工作中我们经常会遇到,将数据库中某张数据表中的内容或数据导出来;今天我们就介绍怎样快速有效的进行数据导出,导入。使用的数据库版本为:mssqlserver2005。首先进行登录mssqlserver2005 ,如下图所示…

pyecharts运行了但是没有图_新版pyecharts,Python可视化so easy and powerful !

作者:chenjiandongx一个执迷于写 bug 的程序员pyecharts V1.0.0 版本正式发布啦!Whats New in pyecharts V1pyecharts 经过了半年的沉寂后,终于发布了新版本啦!新版本号将从 v1.0.0 开始,这是一个全新的,向…

python 整除及余数_python除法余数

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 常量常量就是不变的变量,在python中,通常用大写的变量名表示常量,这一点…

flatmap用法_短说:map和flatmap

PS:本文阅读->理解->GET大概2-5分钟.也许你天天见到,但是一直没理解,占用你少量的时间,相信简单的东西,只需要你付出一点点时间.map和flatmap是Java8中stream的用法.>>>>>>map把数组流中的每一个值,使用所提供的函数执行一遍,一…

git 回退到某个commit_it lesson2 版本回退

回顾上次的知识:1,首先git init 初始化文件的状态,使用git管理文件。2,git add xxx 告诉git把xxx文件添加到仓库3,git commit -m ‘xxxx’告诉git把文件提交到仓库 并对提交的内容作解释(‘xxxx’&#xff…

python数据处理模块pandas_13. Python|模块总结:Pandas(数据处理)|【老W笔记】...

一、基本操作0. 导入模块import pandas as pd1. 新建DataFrame下面的例子中,我们新建一个有3条记录2列属性的表格。3 条记录分别是Tom,Bob,Alice的个人信息,2列属性分别是name和age。新建属性列的语法形如df[XX] List,…

visual studio 设计器不显示_与城共生:南京朝天宫“参与性”城市设计

本课题致力于探索和理解目前中国城市迅速发展的过程中,老旧社区如何与城市共生共进。通过对南京老旧社区的充分调查和研究,选取了朝天宫古玩市场附近的街巷民居和鼓楼工人新村作为设计地块。社会结构的变迁以及城市空间形态的变化都对老旧社区正在进行冲…

mysql error code 1093_MySQL更新时ErrorCode:1093和ErrorCode:1175的解决办法

Error Code: 1093. You canError Code: 1093. You cant specify target table ws_product for update in FROM clause这个是我们在使用update或者delete语句时,在where条件里面加入的子查询导致的。例如如下的update语句:update table set type static …

安装mysql8.019命令符_MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干目录下载完成后解压解压完是这个样子配置初始化的my.ini文件的文件解压后的目录并没有的my.ini文件,没关系可以自行创建在安装根目录下添加的my.ini(新建文本文件,将文件类型改为的.ini),写入基本配置:[mysqld]# …

入Java_初入Java的方法

Java的方法类似于其他语言如C中的函数,比如我们第一个Java程序 输出Hello,world!中用到一个方法System.out.printfln();这里的printfln()就是一个方法,System是系统类,out是对象。1.什么是方法?方法是语句…

java method_JAVA Method的解析

java.lang.reflect.MethodMethodpublic final class Method extends Executable数据的层级结构Paste_Image.pngMethod中的方法boolean [equals].将此方法与指定的对象进行比较T extends [Annotation]T [getAnnotation]如果存在注释,则返回指定类型的注释否则返回为n…

java中this_多学习才能多赚钱之:java中this什么用

java中this什么用1、this调用当前属性:其主要作用是当需要给类中的数据进行初始化时,可以通过this来进行赋值,而不用随便定义一个变量来进行赋值,更有利于代码的阅读与理解(推荐教程:java教程)class Book{//定义书的类…

java api 英文_教你查阅Java API 英文文档(JDK 11)

然后找到“Specifications”并点击 API Documentation比如我们在别人的源码里看到了方法[也叫函数]: Scanner input new Scanner(System.in);所以搜索一下右上角 Scanner,对比我们看到的源码里import,发现是java.util包里的,所以…

jedis使用_Redis --Java客户端 Jedis

Redis --Java客户端 Jedis 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 Jedis: 一款java操作redis数据库的工具. 菜鸟教程文档地址 使用…