본문 바로가기

카테고리 없음

[arcgis pro python] Spatial join 에러

arcpy.management.AddSpatialJoin(
    target_features="buffer_K_150m_3_classify",
    join_features="merge_attri",
    join_operation="JOIN_ONE_TO_ONE",
    join_type="KEEP_ALL",
    field_mapping=r'L3_CODE "L3_CODE" true true false 3 Text 0 0,First,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,L3_CODE,0,3;L3_NAME "L3_NAME" true true false 25 Text 0 0,First,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,L3_NAME,0,25;area "area" true true false 8 Double 0 0,Sum,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,area,-1,-1;삭제여부 "삭제여부" true true false 255 Text 0 0,First,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,삭제여부,0,255;Shape_Length "Shape_Length" false true true 8 Double 0 0,First,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0,Sum,#,C:\Users\USER\Documents\ArcGIS\Projects\python_code\python_code.gdb\merge_attri,Shape_Area,-1,-1',
    match_option="INTERSECT",
    search_radius=None,
    distance_field_name=""
)

이 코드가 계속 안된다 진짜 왜 안되는지 모를...

# Create a new fieldmappings and add the two input feature classes.
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable("buffer_K_150m_3_classify")
fieldmappings.addTable("merge_attri")
 

val= fieldmappings.findFieldMapIndex("위해")
fieldmap = fieldmappings.getFieldMap(val)
 
# Get the output field's properties as a field object
field = fieldmap.outputField
 
# Rename the field and pass the updated field object back into the field map
field.name = "위해"
field.aliasName = "위해"
fieldmap.outputField = field
 
# Set the merge rule to mean and then replace the old fieldmap in the mappings object
# with the updated one
fieldmap.mergeRule = "sum"
fieldmappings.replaceFieldMap(val, fieldmap)

#Run the Spatial Join tool, using the defaults for the join operation and join type
arcpy.SpatialJoin_analysis("buffer_K_150m_3_classify", "merge_attri", "buffer_K_150m_4_Join1", "#", "#", fieldmappings)​

그래서 따로 fieldmapping을 이용해서 했다. 보기에는 복잡해보이지만 은근 간단하다.

그냥 원하는 필드의 계산식을 넣어주는 건데 문제는 한 번에 한 필드밖에 되지않는다는 점.... fieldmapping에 어떻게 많이 넣으면 될 거 같지만 그게 잘 되지않아서 2개의 필드를 first가 아닌 sum으로 바꿔야할 때 저거를 하나 더 복사해서 함 ㅜㅅ ㅜ