Arcgis-Tools_06矢量数据按国土分解
点此下载模型工具,如需只对部分数据操作,提前按属性选择即可(建议10.2及以上使用,同时注意GT_QTDL<0的情况)。
需求
在现有数据基础上建立国土地类字段名(GT_YLD、GT_GMLD、GT_QTLD、GT_GD、GT_QTDL),使用国土数据标识,并将原有面积字段(SJ_MJ)内面积按照标识结果按比例分解,结果显示在现有数据新建的字段内。
难点
面积分解,如何保证面积分解完成后与面积字段内面积完全一致——误差全给GT_QTDL,同时要注意可能造成GT_QTDL<0的情况。
反复建字段,字段计算器计算——构建流程。
流程分解
标识
1、添加ID唯一字段、SHP_ZMJ(填写分解前几何面积)
字段计算器ID=FID+1
SHP_ZMJ=round(!shape.area@hectares!,4) ——Python公式
2、标识
添加字段GTLB(用于将国土地类分解为上述5大类)
SHP_FMJ(填写分解后几何面积)、MJ(用于填写分解后平差面积)
3、GTLB分类
预逻辑脚本代码
def Reclass(DLMC):
if DLMC==u'有林地':
return 'GT_YLD'
elif DLMC==u'灌木林地':
return 'GT_GMLD'
elif DLMC==u'其他林地':
return 'GT_QTLD'
elif DLMC in [u'水田',u'旱地',u'水浇地']:
return 'GT_GD'
else :
return 'GT_QTDL'
面积分解
1、字段计算器
MJ=round([SJ_MJ] * [SHP_FMJ] / [SHP_ZMJ],4)
2、汇总统计
分解结果汇总为按照ID、GTLB分组统计的MJ和
3、数据透视表工具
将GTLB字段行转列
4、连接字段工具
将统计透视结果挂接到现有数据上
5、小数位数造成误差平差,误差全给GT_QTDL
字段计算器,GT_QTDL=SJ_MJ-GT_YLD-GT_GMLD-GT_QTLD-GT_GD
6、解决GT_QTDL<0的情况
解决办法:将此值全部给国土地类中的面积最大项
a.添加max_field字段,存储最大值的国土地类字段名称
获得最大值的国土地类字段名称Python代码
def getMaxFieldName(GT_YLD, GT_GMLD, GT_QTLD, GT_GD):
dic = {"GT_YLD": GT_YLD, "GT_GMLD": GT_GMLD, "GT_QTLD": GT_QTLD, "GT_GD": GT_GD}
return max(dic, key=dic.get)
预定义表达式
getMaxFieldName(!GT_YLD!, !GT_GMLD!, !GT_QTLD!, !GT_GD!)
b.再分别根据最大值情况按属性选择,将误差给最大值
c.完成后清空GT_QTDL<0的值。
根据流程创建模型
如需只对部分数据操作,提前按属性选择即可。