欢迎光临散文网 会员登陆 & 注册

使用arcpy进行批量的空间连接

2021-07-01 23:39 作者:常陈一  | 我要投稿

目标:批量统计每个面要素上各个面上各个类型点的数量


研究单元和数据示例

如果使用空间连接工具进行一个一个处理,那枯燥且漫长。如果使用模型构建器(只允许一个迭代)或者批处理又无法达到把空间连接的结果都在一个表上显示出来。所以使用arcpy 

思路:遍历每一类点数据,并与研究单元图层taz进行空间连接,将结果放到中间图层test中,然后删除原研究单元,最后将test拷贝为taz,随后删除test。接下来处理字段,因为空间连接输出的计算字段名默认为Join_count,为防止后续迭代同名的冲突,新建一个字段存放此结果。此处新建的字段名为当前进行空间连接的点数据类型名,使用字段计算器将值将Join_count中的值放入该字段后,删除Join_count。这样就完成了一个类型点数据的统计,接下来就是反复迭代直至最后。

注:以上数据均存储在一个文件地理数据库中,采用的arcpy3 ,arcgis pro的python包

初始工作:导入包,设置工作空间和变量

# POI统计.py
# Created on: 2021-06-27 10:28:59.00000
#   (generated by ArcGIS/ModelBuilder)
# Description: 
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy
from arcpy.arcobjects.arcobjects import Field



# Local variables:

arcpy.env.workspace="G:\\功能区提取\\POI\\三级类\\POI数据库.gdb"
arcpy.env.overwriteOutput = True
featurename="TAZ"

运行主体:

fcs = arcpy.ListFeatureClasses(feature_type='Point')

for fc in fcs:

    print(fc)
    # Process: 空间连接
    fieldmappings = arcpy.FieldMappings()
    fieldmappings.addTable(featurename)
    arcpy.SpatialJoin_analysis(featurename, fc, 'test', "JOIN_ONE_TO_ONE", "KEEP_ALL",fieldmappings, "INTERSECT")

    #删除上一次的目标要素featurename
    arcpy.DeleteFeatures_management(featurename)
        
    #拷贝这一次的输出要素,重新设定featurename
    arcpy.CopyFeatures_management('test',featurename)

    #获取featurename字段名
    # fieldName = []
    # fields = arcpy.ListFields(featurename)
    # for field in fields:
    #     fieldName.append(field.name)
    # print(fieldName)

    # 删除这一次的输出
    arcpy.DeleteFeatures_management('test')

    # 删除多余的字段
    arcpy.DeleteField_management(in_table=featurename,drop_field=['INTERSECT','TARGET_FID'])[0]

    # 增加计数字段,设定为图层名
    arcpy.AddField_management(featurename,fc,'LONG')[0]

    # Process: 计算字段 (计算字段) 
    arcpy.CalculateField_management(in_table=featurename, field=fc, expression="!Join_Count!", expression_type="PYTHON3", code_block="", field_type="TEXT")[0]

    # 删除join_count字段
    arcpy.DeleteField_management(in_table=featurename,drop_field=['Join_Count'])[0]

     #明确当前处理过程
    print('当前处理完{}图层'.format(fc))

运行结果:



使用arcpy进行批量的空间连接的评论 (共 条)

分享到微博请遵守国家法律