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'
image-20201209220810809

面积分解

1、字段计算器

MJ=round([SJ_MJ] * [SHP_FMJ] / [SHP_ZMJ],4)

2、汇总统计

分解结果汇总为按照ID、GTLB分组统计的MJ和

image-20201209221250572

3、数据透视表工具

将GTLB字段行转列

image-20201209221356313

4、连接字段工具

将统计透视结果挂接到现有数据上

image-20201209221647150

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的值。

根据流程创建模型

如需只对部分数据操作,提前按属性选择即可。

导出图形

原文地址:https://www.cnblogs.com/bigmonk/p/14113258.html