国土空间规划现状基数转换的第一步技术处理

海怪寄语:规划现状基数数据是国土空间规划的新标准,也将纳入国土空间规划“一张图”,同时该数据以三调数据为基础。所以在这里路鹏远(路思远)老师为三调数据向规划现状基数数据转换提供了自己的方式方法。

国空文件最近有点多,国空的现状和三调又不完全一致。国空的现状统计的分类,较三调地类名称的分类,又多了一个城镇等用地属性的划分。理论来说,三调给予的信息是60多个地类名称(DLMC字段的内容)乘以6类城镇村用地属性(201、202、203、204、205,空白),用这些信息去对应新的规划规划基数的统计分类。

三调与现状基数的对应表01

三调与现状基数的对应表02从现在的信息量和对位的情况上来看。技术上是一个较为明确的对应关系了。比如 DLMC 是工业用地,同时这个图斑在城镇村属性上又是201、202的话,基本就可以在这次的规划基数上归为,城镇用地-工业工地。当然,还会有一些不这么明确的,比如采矿用地202,或者特殊用地203,怎么归类,要靠大家自己的智慧和判断了。假定我们把规则可以自己确定下来,那这个规划基数转换,就可以批量去做了。技术路径如下:分析你的项目涉及的地类情况,用到 arcgis 和 excel 去重复值;明确你自己的转换规则,excel 记录就可以了;把你自己的转换规则做成字典,excel 字符串处理公式和 python 的字典知识,很基础的 python知识;arcgis 里应用字段计算器,把地类转换出来,arcgis 字段计算器及 python 两三个语句;arcgis 里的 modelbuilder,把地类转换封装成一个一键转换的工具,如此三调即便更新,你也可以一键生成。cool~~一、分析自己的地类情况三调 DLTB 的文件中,把 DLMC 地类名称和 CZCSXM 城镇村属性码,两个字段合并。新建一个文本字段,然后字段计算器,选择两个名称,然后用 “&” 运算,合并字符串;用“+”这个命令会报错。

把三调整个表导出来的话,excel 支持不了那么多条目。三调图斑动不动几十万块,也很卡的。(Excel 07-2003 一个工作表最多可有65536行。Excel 2007及以后版本,一个工作表最多可有1048576行)。用 arcgis 分类汇总一下表格,然后使用 Table to Excel 工具,导出一个地类加城镇村的统计表。

汇总统计数据

导出excel表导出的表类似于这样:

删除重复的值有了不重复的字段之后,就可以看看了。比如农村宅基地201,嗯~应该是个城中村;采矿202,采矿点离城镇太近了?工业用地205,工业用地,在特殊用地里么,军管区的?未来怎么归类,靠自己判断了!!!加油!二、明确你自己的转换规则就是哪一类归哪一类,自己搞清楚,还是有些东西,归到哪类需要自行判断的。判断完形成一个表格,把大类、细类都记下来,然后也合并一个大类细类在一起的。毕竟城镇用地和村庄用地内部的下一级分类,名称是一样的。

转换对应的规则表三、把你自己的转换规则做成字典之所以要做字典,是为了能够在 gis 里通过字段计算器,把一个字段转换过去,类似于 excel 的 Vlookup 函数的效果。python 的字典,记录的就是这样一种对应关系,一组一组的对应关系。对应关系中,前面是三调加城镇村属性的字符,后面是对应的转后希望得到的字符。类似 {采矿用地202:其他建设用地-采矿用地} 这样的关系。

python字典示意防止出现中文的乱码,所以,我们在字符串前面加上u,变成【u“采矿用地202”】,所以形成的字典里,对应关系就要变成【u"采矿用地202": u"其他建设用地-采矿用地"】。要从之前我们的表格到现在字典,我们用excel里面处理字符的函数,把这样一个对应关系的字典做出来。使用=concatenate() 函数,双引号想要输入的话,就输入两遍,单独的一个对应关系就出来了。然后再用一个函数 =PHONETIC() ,汇总字符串。这样就有了一个规则字典。这个规则字典,如果大家有新的判断,修改就是了。最后形成这样一种对应关系:{u"采矿用地202": u"其他建设用地-采矿用地",u"采矿用地203": u"其他建设用地-采矿用地",u"采矿用地204": u"其他建设用地-采矿用地",u"茶园": u"园地-园地",u"城镇村道路用地202": u"城镇用地-城镇道路用地", ...... , u"竹林地": u"林地-林地",u"竹林地202": u"城镇用地-其他用地",u"竹林地203": u"村庄用地-其他用地"}

excel-concatenate 函数

excel-phonetic 函数四、arcgis里应用字段计算器及python语句arcgis 打开,新字符串字段建起,然后在新字段上应用字段计算器,第一排选 python。框里写下面的字符,做了一个 python 的函数。然后应用这个python函数来计算。运行完就有了 vlookup 的结果了。这个 python 的函数就是一个查询字典的函数。输入的是前面的值,返回你查到的后面的值。for 是一个循环遍历的函数,查到了就 return 你查的值。dict={} 这个里面就填写我们上一步准备出来的字典内容就好了。运行一下,是不是就ok了!!这个运算可以保存,右下角有save。你可以把这个存下来,下次还能用。

arcgis字段计算器+python语句def cal(x):dict = {u"采矿用地202": u"其他建设用地-采矿用地",u"采矿用地203": u"其他建设用地-采矿用地",u"采矿用地204": u"其他建设用地-采矿用地",u"茶园": u"园地-园地",u"城镇村道路用地202": u"城镇用地-城镇道路用地",u"城镇村道路用地203": u"村庄用地-乡村道路用地",u"城镇住宅用地202": u"城镇用地-居住用地",u"城镇住宅用地203": u"村庄用地-居住用地",u"工业用地202": u"城镇用地-工业用地",u"工业用地203": u"村庄用地-工业用地",u"工业用地203A": u"村庄用地-工业用地",u"公路用地": u"区域基础设施用地-公路用地",u"公路用地203": u"区域基础设施用地-公路用地",u"公用设施用地202": u"城镇用地-公用设施用地",u"公用设施用地203": u"村庄用地-公用设施用地",u"公园与绿地202": u"城镇用地-绿地与开敞空间用地",u"沟渠": u"陆地水域-沟渠",u"沟渠202": u"城镇用地-其他用地",u"管道运输用地": u"区域基础设施用地-管道运输用地",u"灌木林地": u"林地-林地",u"灌木林地202": u"城镇用地-其他用地",u"灌木林地203": u"农村用地-其他用地",u"广场用地202": u"城镇用地-绿地与开敞空间用地",u"广场用地203": u"村庄用地-绿地与开敞空间用地",u"果园": u"园地-园地",u"果园202": u"城镇用地-其他用地",u"果园203": u"村庄用地-其他用地",u"旱地": u"耕地-耕地",u"旱地202": u"城镇用地-其他用地",u"旱地203": u"村庄用地-其他用地",u"河流水面": u"陆地水域-河流水面",u"河流水面202": u"陆地水域-河流水面",u"机关团体新闻出版用地202": u"城镇用地-公共管理与公共服务用地",u"机关团体新闻出版用地203": u"村庄用地-公共管理与公共服务用地",u"交通服务场站用地202": u"城镇用地-交通场站用地",u"交通服务场站用地203": u"村庄用地-交通场站用地",u"科教文卫用地202": u"城镇用地-公共管理与公共服务用地",u"科教文卫用地203": u"村庄用地-公共管理与公共服务用地",u"可调整果园": u"园地-园地",u"可调整乔木林地": u"林地-林地",u"可调整养殖坑塘": u"农业设施建设用地-水产养殖设施建设用地",u"可调整养殖坑塘203": u"村庄用地-其他用地",u"坑塘水面": u"农业设施建设用地-水产养殖设施建设用地",u"坑塘水面202": u"城镇用地-其他用地",u"坑塘水面203": u"村庄用地-其他用地",u"空闲地202": u"城镇用地-空闲地",u"裸土地": u"其他土地-裸土地",u"裸岩石砾地": u"其他土地-裸岩石砾地",u"内陆滩涂": u"湿地-湿地",u"内陆滩涂202": u"湿地-湿地",u"农村道路": u"农业设施建设用地-乡村道路用地",u"农村宅基地202": u"城镇用地-居住用地",u"农村宅基地203": u"村庄用地-居住用地",u"其他草地": u"草地-草地",u"其他草地202": u"城镇用地-其他用地",u"其他草地203": u"村庄用地-其他用地",u"其他林地": u"林地-林地",u"其他林地202": u"城镇用地-其他用地",u"其他林地203": u"村庄用地-其他用地",u"其他园地": u"园地-园地",u"其他园地203": u"村庄用地-其他用地",u"乔木林地": u"林地-林地",u"乔木林地201": u"城镇用地-其他用地",u"乔木林地202": u"城镇用地-其他用地",u"乔木林地203": u"村庄用地-其他用地",u"乔木林地204": u"其他建设用地-采矿用地",u"商业服务业设施用地202": u"城镇用地-商业服务业用地",u"商业服务业设施用地203": u"村庄用地-商业服务业用地",u"设施农用地": u"农业设施建设用地-种植设施建设用地",u"设施农用地202": u"城镇用地-其他用地",u"设施农用地203": u"村庄用地-其他用地",u"水工建筑用地": u"区域基础设施用地-水工设施用地",u"水浇地": u"耕地-耕地",u"水库水面": u"陆地水域-水库水面",u"水田": u"耕地-耕地",u"水田202": u"城镇用地-其他用地",u"水田203": u"村庄用地-其他用地",u"特殊用地202": u"其他建设用地-特殊用地",u"特殊用地203": u"其他建设用地-特殊用地",u"特殊用地205": u"其他建设用地-特殊用地",u"物流仓储用地202": u"城镇用地-仓储用地",u"物流仓储用地203": u"村庄用地-仓储用地",u"养殖坑塘": u"农业设施建设用地-水产养殖设施建设用地",u"竹林地": u"林地-林地",u"竹林地202": u"城镇用地-其他用地",u"竹林地203": u"村庄用地-其他用地"}for i in x:i = dict[i]return i五、modelbuilder封装一键转换的工具其实到上一步工作已经完成了。但是如果有多个区县、乡镇你都要做这个事,还要一个一个添加字段,然后运行字段计算器,比较烦,用 modelbuilder 来搞一遍流程,就都好了。model 里面 insert,选 create variable,再选 geodateset。arcgis 工具包里面的运算工具也可以直接拖过来。要用到 add field 增加字段,用到字段计算器。用 connect 连接一个个流程。在开始的数据里,选上你要处理的数据。在增加字段里,把字段设置好。然后字段计算器,也是双击进去设置好。最右侧小三角运行,就运行完了。

modelbuilder

增加字段

字段计算器

model结构示意

工具包示意搞定,试试吧!机械性的工作,还是交给电脑吧。人做多了,还是很烦的。over~该文首发于知乎,id:路鹏远。

(0)

相关推荐