【办公自动化】土地利用/土地用途统计工具 您所在的位置:网站首页 cad自动生成面积表怎么用 【办公自动化】土地利用/土地用途统计工具

【办公自动化】土地利用/土地用途统计工具

2024-07-09 23:00| 来源: 网络整理| 查看: 265

空间规划编制中,需要经常计算统计各用地面积,而最终成果中或报备材料中,不可缺少的就有用地用海现状表、土地利用/土地用途结构调整表等多种面积统计表,此工具就是用来生成各种面积统计表!

工具自带用地标准如下:

国标用地标准依据《国土空间规划用地用海分类指南》[2020.2],江苏用地标准依据《江苏省村庄规划编制指南》(试行)[2020.8],南京用地标准依据《南京市村庄规划编制技术指南》[2020.3] 1、用地统计常规操作 打开需要统计的图层属性表,任意字段右击,选择汇总1选择汇总字段,建议选择Layer,2找到包含面积的Shape_Area,勾选总和,3选择输出位置,确定 在这里插入图片描述新生成一个layer字段的汇总表,包含各类用地的面积汇总,导出Excel就可以编辑成各种需要的表格,距离各种表格还有N步。

在这里插入图片描述

2、用地汇总表/平衡表生成 打开土地用途统计工具,对应选择框选择单一现状用地或者规划用地,选择用地标准,需要自定义标准的选择修改好的自定义用地标准.xls(后文获取)选择保存位置,用现状用地框生成现状用地汇总表,用规划用地框生成规划用地汇总表。 在这里插入图片描述 注意: 各用地面积通过图层文件中ydbm和Shape_Area两个字段进行统计;只有通过三调转换工具生成的图层才会自动添加ydbm字段,如没有可自行添加ydbm(用地编码);刚编辑修改完的用地图层,请在Shape_Area字段右击,点击计算几何…选择平方米更新斑块面积;保存关闭并重新打开的图层理论上已经自动更新完斑块面积,Shape_Area字段的计算几何…灰显,无法使用。

生成的用地汇总表/平衡表如下: 在这里插入图片描述

3、土地用途结构调整表生成

按照《江苏省村庄规划编制指南》(试行)2020年版的要求,报备材料包括“两图、两表、一库、一清单”。其中,“两表”包括规划指标表和土地用途结构调整表。 在这里插入图片描述

操作如下:

生成土地用途结构调整表需要有规划基期年用地和规划目标年用地,通过下拉菜单分别获取相应的图层。选择用地标准,需要自定义标准的选择修改好的自定义用地标准.xls(后文获取)选择保存位置,确定自动生成土地用途结构调整表.xls

在这里插入图片描述

注意:

自动生成的土地用途结构调整表包含用地中所有大、中、小类用地,适合设计过程中的校核与调整。不需要的可自行删除相应行

生成的土地用途结构调整表如下: 在这里插入图片描述

4、如何自定义标准 获取自定义用地标准.xls(后文获取)按照当地标准修改YDBM、YDMC、YDFL涉及不同标准,需要提供五种地类包含大类用地编码的最大值,如江苏村庄标准中,城乡建设用地包含06-14多个大类用地,填入最大值14

目前工具中可选标准的地类分布如下 江苏:01-05、06-14、15-17、18-28 南京:01-05、06-13、14-16、17-21 国标:01-03、04-12、13-15、16-22

在这里插入图片描述

5、脚本文件

GIS里python是2.7版本,自带的库不多,没有pandas就用的xlwt。 获取图层信息,通过ydbm和Shape_Area 生成字典,把同类面积进行汇总

import xlwt import arcpy def get_area(layer): gather_dic ={} table = arcpy.SearchCursor(layer) for row in table: if row.ydbm in gather_dic.keys(): gather_dic[row.ydbm] +=row.Shape_Area else: gather_dic[row.ydbm] = row.Shape_Area return gather_dic

小类生成所属中类,中类生成所属大类

#各类用地汇总 def count_values(dic): dic_count ={} for key in dic: dic_count[key] = dic[key] for n in [6,4]: for key in dic: if len(key) == n: if key[:n-2] not in dic_count.keys(): dic_count[key[:n-2]] =0 dic_count[key[:n-2]] += dic[key] #print(dic_count) return dic_count

用现状用地和规划用地生成一张有顺序的关键信息表,没有DataFrame就用个二维list吧 [编码,名称,现状面积,规划面积] [编码,名称,现状面积,规划面积] …

#生成列表 def set_table(xz_dic = {},gh_dic = {}): dic_hb = {} #合成一个字典 for key in gh_dic: if xz_dic.get(key): dic_hb[key] = [xz_dic[key]/10000,gh_dic[key]/10000] else: dic_hb[key] = [0,gh_dic[key]/10000] for key in xz_dic: if not gh_dic.get(key): dic_hb[key] = [xz_dic[key]/10000,0] table = [] keys = list(dic_hb.keys()) keys.sort() area = [0,0] for key in keys: table.append([key,dic_zw[bz][key]]+dic_hb[key]) #[编码,名称,现状面积,规划面积] if len(key) == 2 : area [0] += dic_hb[key][0] area [1] += dic_hb[key][1] table.append(['0','总计']+area) return table

[u’农林用地’,u’城乡建设用地’,u’其他建设用地’,u’建设用地’,u’自然保护与保留用地’,u’海洋利用’] 为了能区分这几个大大类,且保证没有的时候不显示名称和合计,写了好几个版本,最后用的笨办法。

#计算各合计值插入表中,计算表中位置 def subtotal(): xzmj1 = ghmj1 = xzmj2 = ghmj2 = xzmj3 = ghmj3 = xzmj4 = ghmj4 = xzmj5 = ghmj5 = 0 n1 = n2 = n3 = n4 = n5 = 0 length = len(table) for i in range(length-1): #'js':[0, 5, 14, 17, 20, 28], #算好每类的面积,有才显示 if int(table[i][0][:2])u'1301': u'\u516c\u56ed\u7eff\u5730', ...}, 'nj': {u'0602': u'\u519c\u6751\u4f4f\u5b85\u7528\u5730',...}, 'gb': {u'1304': u'\u673a\u573a\u7528\u5730',... }} #内置的标准,太长省略了 dic_fl = {'js':[0, 5, 14, 17, 28], 'nj':[0, 5, 13, 16, 21], 'gb':[0, 3, 12, 15, 22]} #三种标准的大大类划分 #获取GIS的面板信息 xz_layer = arcpy.GetParameterAsText(0) gh_layer = arcpy.GetParameterAsText(1) ydbz = arcpy.GetParameterAsText(2) zdy_excel = arcpy.GetParameterAsText(3) save_file = arcpy.GetParameterAsText(4)

开始了主程序

if __name__ == '__main__': if zdy_excel : #优先自定义标准 arcpy.AddMessage(u'> 自定义标准 ..') bz = 'zdy' i = 0 zw =[0] zdy = {} table1 = arcpy.SearchCursor(zdy_excel) for row in table1: zdy[row.ydbm] = row.ydmc if i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有