영역 통계 2는 결국 치명적인 오류를 일으 킵니다. 대안이 있습니까?
나는 최근에 일반 "구역 통계"대신 "구역 통계를 표 2로"보충 도구를 사용하는 것으로 전환했습니다. 구역 통계가 처리하지 않는 겹치는 다각형이 있기 때문입니다. 그러나 나는 지금 두어 번 영역 통계 2를 실행하려고 시도했으며 밤새도록 여러 시간 동안 실행 한 후 치명적인 오류가 발생하여 완료되지 않습니다. 이 문제를 어떻게 개선해야할지 모르겠습니다. 100,000 개가 넘는 버퍼 폴리곤 내에서 평균 고도를 계산하려고하는데 다른 래스터 레이어를 사용하여이 작업을 여러 번 수행해야합니다. 명령을 완료하기 위해 도구를 가져 오는 대안이나 방법이 있습니까?
답변
이 문제를 해결하려면 다각형을 겹치지 않고 그룹으로 분할해야합니다. 이를 그래프 채색 이라고 합니다 .
아래 스크립트가 작동하도록하려면 a) networkx 패키지를 설치 하고 b) 실행하십시오.
PolygonNeighbors("POLYGONS", "neighbours", area_overlap="AREA_OVERLAP")
스크립트:
'''
creates non-adjacent groups of polygons
'''
import arcpy
import networkx as nx
infc = arcpy.GetParameterAsText(0)
table = arcpy.GetParameterAsText(1)
sourceList=[f.name for f in arcpy.ListFields(table)]
FTO=sourceList[1:3]
fromto=arcpy.da.TableToNumPyArray(table,FTO)
try:arcpy.AddField_management(infc, "COLOR","Short")
except:pass
G=nx.Graph()
G.add_edges_from(fromto)
allGroups=sorted(nx.connected_components(G), key = len, reverse=True)
arcpy.AddMessage("%i connected groups found" %len(allGroups))
D={}
for item in allGroups:
arcpy.AddMessage(len(item))
subG=G.subgraph(item)
d = nx.coloring.greedy_color(subG, strategy=nx.coloring.strategy_largest_first)
D.update(d)
with arcpy.da.UpdateCursor(infc,("OID@","COLOR")) as cursor:
for row in cursor:
if row[0] not in item:continue
row[1]=D[row[0]]+1
cursor.updateRow(row)
arcpy.AddMessage("Done")
"COLOR"필드를 추가하고 범위 (1..4)의 숫자로 채 웁니다. 이것은 이론적 범위이며 겹치는 정도에 따라 더 큰 것을 예상합니다. 최악의 시나리오는 7 색이라고 말하고 싶습니다. 2 개의 매개 변수가있는 도구에 스크립트를 지정하지 않으려면 입력 피쳐 클래스 (infc) 및 인접 테이블 (테이블)을 하드 코딩 할 수 있습니다.
스크립트는 고립 영역 다각형을 건너 뜁니다. 이렇게하면 피쳐 클래스의 소스에 따라 필드 COLOR의 값이 없음 또는 0이됩니다.

진행 방법에 대한 몇 가지 옵션이 있습니다.
- 정의 쿼리 (예 : "COLOR"= 1)를 사용하여 POLYGONS에서 n 개의 레이어를 수동으로 정의하고 각각에 대해 영역 통계를 실행합니다. 결과를 병합합니다.
- 위의 작업을 자동화하는 스크립트를 작성하거나 모델을 개발하십시오.
처리 범위와 셀 크기 환경 설정을 엉망으로 만들거나 래스터 및 버퍼에 다른 투영을 사용하지 않는 한 이것이 영역 통계 2가이면에서 수행하는 작업과 정확히 일치한다고 생각합니다.