【办公自动化】土地利用/土地用途统计工具 | 您所在的位置:网站首页 › cad自动生成面积表怎么用 › 【办公自动化】土地利用/土地用途统计工具 |
空间规划编制中,需要经常计算统计各用地面积,而最终成果中或报备材料中,不可缺少的就有用地用海现状表、土地利用/土地用途结构调整表等多种面积统计表,此工具就是用来生成各种面积统计表! 工具自带用地标准如下: 国标用地标准依据《国土空间规划用地用海分类指南》[2020.2],江苏用地标准依据《江苏省村庄规划编制指南》(试行)[2020.8],南京用地标准依据《南京市村庄规划编制技术指南》[2020.3] 1、用地统计常规操作 打开需要统计的图层属性表,任意字段右击,选择汇总1选择汇总字段,建议选择Layer,2找到包含面积的Shape_Area,勾选总和,3选择输出位置,确定![]() ![]() 生成的用地汇总表/平衡表如下: 按照《江苏省村庄规划编制指南》(试行)2020年版的要求,报备材料包括“两图、两表、一库、一清单”。其中,“两表”包括规划指标表和土地用途结构调整表。 操作如下: 生成土地用途结构调整表需要有规划基期年用地和规划目标年用地,通过下拉菜单分别获取相应的图层。选择用地标准,需要自定义标准的选择修改好的自定义用地标准.xls(后文获取)选择保存位置,确定自动生成土地用途结构调整表.xls自动生成的土地用途结构调整表包含用地中所有大、中、小类用地,适合设计过程中的校核与调整。不需要的可自行删除相应行 生成的土地用途结构调整表如下: 目前工具中可选标准的地类分布如下 江苏:01-05、06-14、15-17、18-28 南京:01-05、06-13、14-16、17-21 国标:01-03、04-12、13-15、16-22 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 实验室设备网 版权所有 |