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

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

 01 

内置函数与自定义函数

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

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

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

  • 系统内置函数

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

  • 自定义函数

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

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

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

通常情况下,自定义函数首先需要使用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’结尾的投影分度带字符串。

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

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

 02 

查找函数

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

 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),注意到,参数的顺序并未按照默认顺序给出,而表达式引擎也正确地返回计算结果。

 04 

常用函数

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

 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日


版权声明

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

python symbol函数展开_QGIS表达式中的函数相关推荐

  1. EL表达式中fn函数(转载)

    EL表达式中fn函数 JSTL 使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及 session中的数据的访问非常方便,但是 ...

  2. python——函数(定义函数、传递实参、返回值、传递列表、传递任意数量的实参、将函数存储在模块中、函数编写指南)

    目录 定义函数 传递实参 返回值 传递列表 传递任意数量的实参 将函数存储在模块中 函数编写指南 定义函数 #------定义函数---------- def user():print('hello! ...

  3. left函数未定义_access中LEFT函数未定义的解决方案\表达式中'left'函数未定义。

    时 间:2012-07-03 09:30:55 作 者: 摘 要:表达式中'left'函数未定义. 正 文: 在使用ACCESS过程中,经常遇到网友问ACCESS中LEFT函数未定义,RIGHT函数未 ...

  4. EL表达式中fn函数的强大功能,很简单,很好用,很强大

    很简单,很强大,EL表达式中fn函数的强大功能,比如举个例子,要计算某个对象中的某个集合的大小,直接用EL表达式就可以计算出来-- ${fn:length(clazze.course)} 使用fn函数 ...

  5. 通过GetProcAddress函数动态调用dll中地函数,是否必须通过extern C声明导出函数?(转)...

    通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern "C"声明导出函数? [已结贴,结贴人:darongtou] 如题,网上搜了N多资料,一直找不 ...

  6. GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数?

    GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数? 通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern " ...

  7. c语言程序中函数类型,C语言中的函数分别有什么?

    C语言函数是一种函数,用来编译C语言,所在库函数为ctype.h,分为分类函数,数学函数,目录函数,进程函数,诊断函数,操作函数等. C语言中的函数在其他编程语言中也称为过程或子程序.要执行任务,我们 ...

  8. python中函数的使用_python中的函数的使用示例

    函数定义: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 函数内容以冒号起始,并且缩进 函数以return 结束,若无return 返回non 示例: def myFun(): ...

  9. python中定义函数常用关键字_Python 中定义函数的关键字是 _________________ 。_学小易找答案...

    [其它]实验4-串和数组-实验任务书.docx [填空题]表达式 'abc' in ['abcdefg'] 的值为______________. [填空题]已知 x = range(1,4) 和 y ...

最新文章

  1. python高级应用_Python高级编程技巧
  2. 剑指offer(23)二叉搜索树的后序遍历序列
  3. 异常处理_Maven之web项目java.lang.LinkageError
  4. 把一个数组分为多个数组
  5. 面板大小调整_3天学会premiere完全自学教程-了解时间轴面板
  6. ×××送通知服务教程 Apple Push Notification Services Tutorial
  7. Android 应用开发---ViewPager---5.使用Fragment实现ViewPager滑动
  8. Axure高保真企业商城后台管理系统web端公司商城后台管理原型连锁门店管理系统交互组件点餐平台商家管理端后台库存管理财务管理系统管理接单管理
  9. matlab simout,每日学习Matlab(2)
  10. 携程状告去哪儿一案有猫腻
  11. js 调用百度地图,并且定位用户地址,显示省市区街,经纬度
  12. vb从入门到精通_干货|让你 ArcGIS Engine从入门到精通的22个视频
  13. win10安装atom的步骤
  14. Java中使用Protocol Buffer
  15. 蓝桥ROS机器人之C++基础开发第一个程序
  16. JavaScript 剪贴板
  17. 计算机专业我的理想作文,我的理想经典优秀作文
  18. Android Studio 3.5 怎样获取MD5签名
  19. docker:IPv4 forwarding is disabled. Networking will not work. 解决方法
  20. 【汇正财经】什么是股票交割方式?股票交割方式有哪些?

热门文章

  1. oracle clob 回车换行问题
  2. hibernate 双向一对多 关联在多端维护
  3. mysql切换到使用openssl,MySQL主从复制+OpenSSL
  4. python 持续集成工具_持续集成工具: Jenkins学习
  5. python最新面试题_2018年最新Python面试题及答案
  6. 泰山200机架服务器包含哪些型号_数据中心机房建设中的关键问题都有哪些?
  7. oracle lsnrctl status unknown,数据库监听卡住 Oracle lsnrctl status 卡在connecting ......
  8. K-periodic Garland CodeForces - 1353E(贪心)
  9. [蓝桥杯][2017年第八届真题]k倍区间(数学+思维)
  10. c语言表达式判断,在C语言的if语句中,用做判断的表达式为()。