使用arcpy進行批量的空間連接
目標(biāo):批量統(tǒng)計每個面要素上各個面上各個類型點的數(shù)量


思路:遍歷每一類點數(shù)據(jù),并與研究單元圖層taz進行空間連接,將結(jié)果放到中間圖層test中,然后刪除原研究單元,最后將test拷貝為taz,隨后刪除test。接下來處理字段,因為空間連接輸出的計算字段名默認(rèn)為Join_count,為防止后續(xù)迭代同名的沖突,新建一個字段存放此結(jié)果。此處新建的字段名為當(dāng)前進行空間連接的點數(shù)據(jù)類型名,使用字段計算器將值將Join_count中的值放入該字段后,刪除Join_count。這樣就完成了一個類型點數(shù)據(jù)的統(tǒng)計,接下來就是反復(fù)迭代直至最后。
注:以上數(shù)據(jù)均存儲在一個文件地理數(shù)據(jù)庫中,采用的arcpy3 ,arcgis pro的python包
初始工作:導(dǎo)入包,設(shè)置工作空間和變量
# POI統(tǒng)計.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:\\功能區(qū)提取\\POI\\三級類\\POI數(shù)據(jù)庫.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")
? ?#刪除上一次的目標(biāo)要素featurename
? ?arcpy.DeleteFeatures_management(featurename)
? ? ? ?
? ?#拷貝這一次的輸出要素,重新設(shè)定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]
? ?# 增加計數(shù)字段,設(shè)定為圖層名
? ?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]
? ? #明確當(dāng)前處理過程
? ?print('當(dāng)前處理完{}圖層'.format(fc))
運行結(jié)果:

標(biāo)簽: