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

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


研究单元和数据示例:

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

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

注:以上数据均存储在一个文件地理数据库中

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

# 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))

运行结果:

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值