用python來寫arcgis的字段計算器,根據行政區劃來給字段賦值,
python
要注意格式的問題,
1.python與其他語言最大的區別就是,python的**塊不使用大括號{}來控制類,函式以及其他邏輯判斷。python最具特色的就是用縮進來寫模組。 縮排的空白數量是可變的,但是所有**塊語句必須包含相同的縮排空白數量,這個必須嚴格執行。
2.python中預設的編碼格式是 ascii格式,在沒修改編碼格式時無法正確列印漢字,所以在讀取中文時會報錯。
解決方法為只要在檔案開頭加入 # -*- coding: utf-8 -*- 就行了。但是在arcgis裡的指令碼編輯域編碼格式是不可更改的,因此這句話沒效果。需要在字串前面加上u才行。
3.python的字串必須用雙引號擴起。
4.python
的變數必須用
!!擴起。
不多說了,不上**的技術博主都不是好大夫。
示例,根據北京市的行政區劃名稱來確定行政區劃編碼,abcd為引數名,可以自行更換。
**塊:
def reclass(abcd):
if (abcd == u"東城區"):
return 110101
elif (abcd == u"西城區"):
return 110102
elif (abcd == u"朝陽區"):
return 110105
elif (abcd == u"豐台區"):
return 110106
elif (abcd == u"石景山區"):
return 110107
elif (abcd == u"海淀區"):
return 110108
elif (abcd == u"門頭溝區"):
return 110109
elif (abcd == u"房山區"):
return 110111
elif (abcd == u"通州區"):
return 110112
elif (abcd == u"順義區"):
return 110113
elif (abcd == u"昌平區"):
return 110114
elif (abcd == u"大興區"):
return 110115
elif (abcd == u"懷柔區"):
return 110116
elif (abcd == u"平谷區"):
return 110117
elif (abcd == u"密雲區"):
return 110228
elif (abcd == u"密雲縣"):
return 110228
elif (abcd == u"延慶區"):
return 110229
elif (abcd == u"延慶縣"):
return 110229
elif (abcd == u"亦莊經濟開發區"):
return 110230
else :
return 110000
上面的**格式都是嚴格控制了,有類似需要的可以直接複製,改一改就能用了。
這裡要說明兩點:1.else是必不可少的。2.別忘了加冒號。
在下面你要賦值的字段處呼叫上面定義的函式,然後傳參就可以了,我這裡做個示例:
reclass(!name!)
ArcGIS中欄位計算器的問題
這幾天在給同門師兄處理乙個土地利用資料,需要將原先的分類轉換為另一種新的分類,其實就是根據乙個已經存在土地利用 生成新的字段,這個欄位是按照新的分類標準來組織,國內的的土地利用 有好幾套,比如二調的 體系和中科院的 體系,師兄由於研究的需要在此基礎還自己發展了一套新的地類編碼。所以有時候就需要在這幾...
ArcGIS 柵格計算器
規定 表示此為可選引數 用 標識 未完 示例函式名稱 例子con con elevation 2000,elevation elevation 2000保留原值,不滿足條件為nodata isnull isnull raster setnull setnull raster raster value...
ArcGIS柵格計算器
柵格計算器能用好的話真的也是很強大 一,arcgis中柵格計算常用表示式 我自己遇到的差不多就這些 1 將特定值 9999 賦值為0 con raster 9999,0,raster 2 將某一範圍內 如小於0 賦值為0 con raster 0,0,raster 3 將特定的柵格值 如1 賦值為空...