ArcGIS属性表中对某一字段进行分段…

需求描述:现有一个矢量图层,其中ACRES字段记录了每一个面要素的面积,如何分段对该字段求和,如该字段数值在以下范围时0-50,50-300,300-1000,>4000,其面积分别是多少?

解决方案:

(1)      对于数据量少的,可以采用此方法;

可以通过属性查询(select byattributes),通过表达式:ACRES >0 AND ACRES <=50将分段范围的要素类选择,使用export
data
将选中的要素导出。

ArcGIS属性表中对某一字段进行分段求和

导出后在ACRES字段右键,使用statistics,出现如下图所示,即可得出ACRES >0 AND ACRES <=50Sum值为203.951802;同样的方法,将剩余的分段依次求出。

 

(2)      对于数据量大,方案1就比较麻烦,可以使用python表达式来实现,由于下述方法直接改变字段的属性值,所以操作之前,新建一个ACRES_1字段,使其值等于ACRES

ACRES字段右键点击field Calculator,勾选show codeblock,在Pre-logic
Script code
框中输入下述表达式:

def Reclass(WellYield):

    if(WellYield >= 0 and WellYield <= 50):

       return 1

    elif(WellYield > 50 and WellYield <= 300):

       return 2

    elif(WellYield > 300 and WellYield <=1000):

       return 3

    elif(WellYield > 4000):

       return 4

具体参考如下截图:

运行完后,ACRES字段属性值将改变,0-50被赋值为150-300被赋值为2300-1000被赋值为3>4000被赋值为4

然后使用SummaryStatistics,设置如下图:

 

计算结果为:

(3)      直接使用arcpy脚本实现,具体代码如下:

import arcpy

arcpy.env.workspace =r”E:\ArcTutor\Editing\Zion.gdb”

# Create insert cursor fortable

cursor =arcpy.da.SearchCursor(“Research_areas”,

                            [“AREA”,”PERIMETER”])

sum1=0

sum2=0

sum3=0

sum4=0

for row in cursor:

   print(row)

    if(row[0] >= 10 and row[0] <= 100):

       sum1=sum1+row[0]

    elif(row[0] > 100 and row[0] <= 1000):

       sum2=sum2+row[0]

    elif(row[0] > 1000 and row[0] <= 10000):

       sum3=sum3+row[0]

    elif(row[0] > 10000):

       sum4=sum4+row[0]

 

printsum1,sum2,sum3,sum4

转载自:https://blog.csdn.net/zglybl/article/details/75214046

You may also like...