ArcGIS使用字段計算器python腳本整理三規合一圖斑

最近試着使用字段計算器內的python腳本整理圖斑,蹣跚學步,做下記錄。

1.用地代碼與名稱轉換

1.1城規用地代碼CGYDDM轉用地名稱CGYDMC

做一個python字典再索引即可(碼齊這些分類還挺累。。)


list = { 
'A':'公共管理與公共服務用地',
'A1':'行政辦公用地',
'A2':'文化設施用地',
'A21':'圖書展覽設施用地',
'A22':'文化活動設施用地',
'A3':'教育科研用地',
'A31':'高等院校用地',
'A32':'中等專業學校用地',
'A33':'中小學用地',
'A34':'特殊教育用地',
'A35':'科研用地',
'A4':'體育用地',
'A41':'體育場館用地',
'A42':'體育訓練用地',
'A5':'醫療衛生用地',
'A51':'醫院用地',
'A52':'衛生防疫用地',
'A53':'特殊醫療用地',
'A59':'其它醫療衛生用地',
'A6':'社會福利設施用地',
'A7':'文物古蹟用地',
'A8':'外事用地',
'A9':'宗教設施用地',
'B':'商業服務業設施用地',
'B1':'商業設施用地',
'B11':'零售商業用地',
'B12':'批發市場用地',
'B13':'餐飲用地',
'B14':'旅館用地',
'B2':'商務設施用地',
'B21':'金融保險用地',
'B22':'藝術傳媒用地',
'B29':'其他商務設施用地',
'B3':'娛樂康體設施用地',
'B31':'娛樂用地',
'B32':'康體用地',
'B4':'公用設施營業網點用地',
'B41':'加油加氣站用地',
'B49':'其它公用設施營業網點用地',
'B9':'其它服務設施用地',
'E':'非建設用地',
'E1':'水域',
'E11':'自然水域',
'E12':'水庫',
'E13':'坑塘溝渠',
'E2':'農林用地',
'E9':'其它非建設用地',
'G':'綠地與廣場用地',
'G1':'公園綠地',
'G2':'防護綠地',
'G3':'廣場用地',
'H':'建設用地',
'H1':'城鄉居民點建設用地',
'H11':'城市建設用地',
'H12':'鎮建設用地',
'H13':'鄉建設用地',
'H14':'村莊建設用地',
'H2':'區域交通設施用地',
'H21':'鐵路用地',
'H22':'公路用地',
'H23':'港口用地',
'H24':'機場用地',
'H25':'管道運輸用地',
'H3':'區域公用設施用地',
'H4':'特殊用地',
'H41':'軍事用地',
'H42':'安保用地',
'H5':'採礦用地',
'H9':'其它建設用地',
'M':'工業用地',
'M1':'一類工業用地',
'M2':'二類工業用地',
'M3':'三類工業用地',
'R1':'一類居住用地',
'R11':'一類居住用地-住宅用地',
'R12':'一類居住用地-服務設施用地',
'R2':'二類居住用地',
'R21':'二類居住用地-住宅用地',
'R22':'二類居住用地-服務設施用地',
'R3':'三類居住用地',
'R31':'三類居住用地-住宅用地',
'R32':'三類居住用地-服務設施用地',
'S':'道路與交通設施用地',
'S1':'城市道路用地',
'S2':'城市軌道交通用地',
'S3':'交通樞紐用地',
'S4':'交通站場用地',
'S41':'公共交通站場用地',
'S42':'社會停車場用地',
'S9':'其它交通設施用地',
'U':'公用設施用地',
'U1':'供應設施用地',
'U11':'供水用地',
'U12':'供電用地',
'U13':'供燃氣用地',
'U14':'供熱用地',
'U15':'通信設施用地',
'U16':'廣播電視設施用地',
'U2':'環境設施用地',
'U21':'排水設施用地',
'U22':'環衛設施用地',
'U23':'環保設施用地',
'U3':'安全設施用地',
'U31':'消防設施用地',
'U32':'防洪設施用地',
'U9':'其它公用設施用地',
'W':'物流倉儲用地',
'W1':'一類物流倉儲用地',
'W2':'二類物流倉儲用地',
'W3':'三類物流倉儲用地',
}

再給CGYDMC字段賦值

list.get( !CGYDDM! )



1.2 土規用地代碼TGYDDM轉用地名稱TGYDMC

list = { 
'1110':'水田',
'1120':'水澆地',
'1130':'旱地',
'1310':'有林地',
'1320':'灌木林',
'1330':'其它林地',
'1410':'天然牧草地',
'1420':'人工牧草地',
'1510':'設施農用地',
'1520':'農村道路',
'1530':'坑塘水面',
'1540':'農田水利用地',
'1550':'田坎',
'2110':'城鎮用地',
'2120':'農村居民點用地',
'2130':'採礦用地',
'2140':'其它獨立建設用地',
'2210':'鐵路用地',
'2220':'公路用地',
'2230':'民用機場用地',
'2240':'港口碼頭用地',
'2250':'管道運輸用地',
'2260':'水庫水面',
'2270':'水工建築用地',
'2310':'風景名勝設施用地',
'2320':'特殊用地',
'2330':'鹽田',
'3110':'河流水面',
'3120':'湖泊水面',
'3130':'灘塗',
'3210':'荒草地',
'3220':'鹽鹼地',
'3230':'沙地',
'3240':'裸地',
'3250':'其它未利用土地',
'1100':'耕地',
'1200':'園地',
'1300':'林地',
'1400':'牧草地',
'1500':'其它農用地',
'2100':'城鄉建設用地',
'2200':'交通水利用地',
'2300':'其他建設用地',
'3100':'水域',
'3200':'自然保留地',
'1000':'農用地',
'2000':'建設用地',
'3000':'其它土地'}



2.銜接地類代碼整理

城規

cx = ['H11', 'H14', 'H5']
fc = ['H2', 'H4', 'H9']
fJ = ['E1', 'E2', 'E9']

def CGXJDLDM(CG):
  if  CG in cx:
    return 'cx'
  elif CG in fc:
    return 'fc'
  else:
    return 'fJ'

賦值:

CGXJDLDM(!CGDLDM!)




3.1 三規合一之城規CG與土規TG建設用地差異CYFQMC

定義一個函數,然後用條件語句分類

因爲兩規的規劃範圍不一致,導致兩規的銜接地類代碼中均出現空值‘’,可歸爲非建fJ。(正確流程還是先統一兩規邊界再做後續分析,故fJ不需再包含空值)

J = ['cx', 'fc']
fJ = ['fJ','']

def CYFX(CG,TG):
       if TG in J and CG in fJ:
         return "土規建設用地,城規非建設用地"
       elif CG in J and TG in fJ:
         return "土規非建設用地,城規建設用地"
       elif CG in J and TG in J:
         return "城鄉規劃和土地利用總體規劃均爲建設用地"
       else:
         return "城鄉規劃和土地利用總體規劃均爲非建設用地"

下方字段賦值

CYFQMC=
CYFX( !CGXJDLDM!, !TGXJDLDM!)


3.2三規合一之現狀XZ與土規TG建設用地差異CYFQMC

需要注意的問題是,ArcGIS10.2.2如果字段使用了中文的字符,python條件語句會執行出錯,糾結好久才發現這個問題所在。

被迫把國土已批GTYP和復墾用地FKYD字段改爲短整給值1。

J = ['cx', 'fc']
fJ = ['fJ', '']

def CYFX(XZ,TG,GTYP,FKYD):
    if TG in J and XZ in fJ:
      if GTYP == 1:
        return "土規爲建設用地,現狀爲非建設用地,已批未建"
      else:
        return "土規爲建設用地,現狀爲非建設用地,未批未建"

    elif TG in fJ and XZ in J:
      if FKYD == 1:
        return "土規爲非建設用地,現狀爲建設用地,復墾用地"
      elif GTYP == 1:
        return "土規爲非建設用地,現狀爲建設用地,非復墾用地,已批已建"
      else:
        return "土規爲非建設用地,現狀爲建設用地,非復墾用地,未批已建"

    elif XZ in J and TG in fJ:
      return "土規與現狀均爲建設用地"
    else:
      return "土規與現狀均爲非建設用地"

賦值:

CYFX( !XZXJDLDM!, !TGXJDLDM!, !GTYP!, !FKYD!)

3.3三規合一之現狀XZ與城規CG建設用地差異CYFQMC


J = ['cx', 'fc']
fJ = ['fJ', '']

def CYFX(XZ,CG,GHYP):
    if CG in J and XZ in fJ:
      if GHYP == 1:
        return "城規爲建設用地,現狀爲非建設用地,已批未建"
      else:
        return "城規爲建設用地,現狀爲非建設用地,未批未建"
    elif XZ in J and CG in fJ:
      if GHYP == 1:
        return "城規爲非建設用地,現狀爲建設用地,已批已建"
      else:
        return "城規爲非建設用地,現狀爲建設用地,未批已建"
    elif XZ in J and CG in J:
      return "城規與現狀均爲建設用地"
    else:
      return "城規與現狀均爲非建設用地"

4.字符串操作

4.1地塊編號

如按鎮區首字母大寫加5位數字:HP00001,後面的ID可以用自動生成的ObjectID或者重新生成一個

ID=0
def newID():
    global ID
    ID+=1
    return ID

newID()

接下來是字符串的對齊操作,左對齊5位,補充0,再添加打頭字母即可。

'HP'+'{:0>5}'.format('ID')

5.ArcGIS中python的中文支持問題

查了不少地方,最終解決方案爲中文字符串後加 .decode('utf-8'),如:

'建設用地區'.decode('utf-8')

補充點題外的:忽然發現字段查詢器那裏SQL語句,可以使用例如 CGYDDM NOT IN ( '' , 'E1' , 'E2' , 'FZBYD', 'H2' ) 的方式完成多個條件的簡化,看來SQL語法還是要單獨去學學。

未完待續



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章