ArcGIS使用字段计算器python脚本整理三规合一图斑

来源:互联网 发布:桌面windows手机版 编辑:程序博客网 时间:2024/04/30 05:14

最近试着使用字段计算器内的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=0def newID():    global ID    ID+=1    return IDnewID()

接下来是字符串的对齐操作,左对齐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语法还是要单独去学学。

未完待续



0 0
原创粉丝点击