ArcGIS Pro學習加我的微信號和微信公眾號
微信號,
微信公眾號
在ArcGIS中可以使用Python或VBScript來對屬性表進行高級計算。
Python是ArcGIS推薦的腳本語言,例如如果要訪問地理處理功能(包括要素幾何)。
而VBA或VBScript從早期版本的ArcGIS 保存的 .cal文件可能會起作用,或者需要進行最少的修改。
注意幾個小細節部分:
Python強制將縮進作為語法的一部分。使用兩個或四個空格來定義每個邏輯級別。對齊語句塊的開頭和結尾,並保持一致。
Python計算表達式字段包含在感嘆號(!!)中。
在命名變量時,需要注意Python區分大小寫,因此yeah與Yeah不同。
VBScript不允許顯式聲明任何數據類型。所有變量都是隱式Variant。像Dim x as String這樣的語句應刪除或簡化為Dim x。
輸入語句后,如果要將語句寫入文件,則可以單擊“ 保存”。在加載按鈕將提示您查找和選擇一個現有計算文件。
以下將舉例幾個簡單的計算示例:
Python簡單的字符串示例:
一系列Python字符串函數支持字符串,包括大寫,rstrip和replace。
在字段PERSON_NAME中大寫字符串的第一個字符:
!PERSON_NAME!.capitalize();
在字段PERSON_NAME的字符串末尾刪除所有空格:
!PERSON_NAME!.rstrip();
將在“ CITY_NAME ”字段中找到的“上海市”替換為“上海” :
!CITY_NAME !.replace(“上海市”, “上海”);
可以通過在Python中建立索引和切片來訪問字符串字段中的字符。索引提取在索引位置的字符;切片將獲取一組字符。
!fieldname![0]。含義:第一個字符。輸出:“a”
!fieldname![-2]。含義:倒數第二個字符。輸出:“ e”
!fieldname![1:4]。含義:第二,第三,第四和第五個字符。輸出:“ bcd”
Python還支持使用%運算符進行字符串格式化。
合並用冒號分隔的FieldA和FieldB:
“%s:%s” % (!FieldA!, !FieldB!)
Python提供了用於處理給定半徑字段,計算球體的體積:
4 / 3 * math.pi * !Radius! ** 3
使用Python表達式執行字段計算時,Python數學規則有效。例如,將兩個整數值相除將始終產生整數輸出(3/2 = 1)。要獲得十進制輸出:
該操作中的數字之一必須為十進制值:3.0 / 2 = 1.5
使用float函數將值顯式轉換為float:
float(3)/2 = 1.5
float(!Population!) / !Area!
VBScript字符串函數
一系列VBScript字符串函數支持字符串,包括Left,InStr和Chr。下面是字段計算器中常用字符串函數的一些VBScript示例。
左函數:從字符串的左側返回包含指定數目的字符的Variant(字符串):
MyStr = Left([MyField], 1)
右側函數:從字符串的右側返回包含指定數量的字符的Variant(字符串):
MyStr = Right([MyField], 1)
中間函數:從字符串返回包含指定數量字符的Variant(字符串):
MyString = “Mid Function Demo” 'Create text string
FirstWord = Mid(MyString, 1, 3) ’ Returns “Mid”
LastWord = Mid(MyString, 14, 4) 'Returns “Demo”
MidWords = Mid(MyString, 5) 'Returns “Function Demo”
InStr函數:返回一個變量(長整數),該變量指定一個字符串在另一個字符串中首次出現的位置:
MyPosition = InStr([address], " ")
替換函數:返回一個字符串,其中指定的子字符串已被另一個子字符串替換了指定的次數:
NewString = Replace([comments], “#”, “!”)
Chr函數:返回一個字符串,其中包含與指定字符代碼關聯的字符:
NewString = Replace([comments], chr(13), “!”)
&運算符:用於強制兩個表達式的字符串連接:
MyStr = [MyField1] & " " & [MyField2]
Python內置函數
Python具有許多可用的內置函數,包括max,min,round和sum。
從字段列表中計算每個記錄的最大值:
max([!field1!, !field2!, !field3!])
從字段列表中計算每個記錄的總和:
sum([!field1!, !field2!, !field3!])
使用代碼塊
Python代碼樣本-數學
將字段的值四舍五入到小數點后兩位:
round(!area!, 2)
使用數學模塊可幫助將米轉換為英尺。轉換被提高到2的冪並乘以面積:
MetersToFeet((float(!shape.area!)))
Code Block:
import math
def MetersToFeet(area):
return math.pow(3.2808, 2) * area
使用Python邏輯計算字段,根據字段值進行分類:
Reclass(!WELL_YIELD!)
Code Block:
def Reclass(WellYield):
if (WellYield >= 0 and WellYield <= 10):
return 1
elif (WellYield > 10 and WellYield <= 20):
return 2
elif (WellYield > 20 and WellYield <= 30):
return 3
elif (WellYield > 30):
return 4
注意,如果是漢字編碼可能會出現問題,添加前綴u即可,如u"中國",
在python2里面,u表示unicode string,類型是unicode, 沒有u表示byte string,類型是 str。
在python3里面,所有字符串都是unicode string, u前綴沒有特殊含義了
使用VBScript邏輯計算字段
根據表達式的值,有條件地執行一組語句:
Code Block:
Dim density
If [POP90_SQMI] < 100 Then
density = “low”
elseif [POP90_SQMI] < 300 Then
density = “medium”
else
density = “high”
end if
Python代碼樣本-幾何
計算特征的面積:
!shape.area!
計算wkt文本值:
!shape.wkt!
計算特征的最大X坐標:
!shape.extent.XMax!
計算特征的長度(以碼為單位):
!shape.length@yards!
計算特征的面積(以英畝為單位):
!shape.area@acres!
計算當前日期:
time.strftime("%d/%m/%Y")
計算當前日期和時間:
time.strftime("%d/%m/%Y %H:%M")
返回最右邊的三個字符:
!SUB_REGION![-3:]
用小寫“ p”替換大寫“ P”的所有情況:
!STATE_NAME!.replace(“P”,“p”)
用空格分隔符連接兩個字段:
!SUB_REGION! + " " + !STATE_ABBR!
Python隨機值
使用numpy網站包可計算0.0到1.0之間的隨機浮點值:
getRandomValue()
Code Block:
import numpy.random as R
def getRandomValue():
return R.random()
計算空值:
使用Python表達式,可以使用Python None來計算空值(僅當字段可為空時,以下計算才有效),使用Python None來計算空值:
“None”
詳情請見ArcGIS幫助文檔