python symbol函数展开_QGIS表达式中的函数
編程語言中的函數,與數學函數的定義大不相同。在計算機領域,函數是指一段可以直接被另一段程序或代碼引用的程序或代碼,也叫做子程序(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表达式中的函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java和c++的区别是什么(Pytho
- 下一篇: python做abaqus后处理_pyt