인접한 멀티 파트 형상을 작성할 때 ArcPy에 잘못된 내부 링이 추가됩니까?


12

Arcpy를 사용하여 멀티 파트 지오메트리를 shapefile에 쓸 때 이상한 문제가 발생했습니다. InsertCursor를 사용하여 각 정점 쌍 목록이있는 부품 목록에서 다중 부품 피처를 만듭니다. 이 기능을 만들면 인접한 여러 부품이 자동으로 단일 부품으로 "해산"됩니다. 그러나 어떤 이유로 든 내부 링을 생성하는 데 일반적으로 내부 링을 추가하는 데 필요한 Null arcpy.point ()를 배열에 포함시키지 않았지만 내부 링을 생성합니다. 시각화는 다음과 같습니다.

아크 피 오류의 시각화

왜 이런 일이 발생하는지 및 / 또는 문제를 극복하는 방법을 알고 있습니까?

참고로 내 코드는 다음과 같습니다.

import arcpy

arcpy.CreateFeatureclass_management(r"C:\temp", "test.shp", "POLYGON")
OutputCursor = arcpy.InsertCursor(r"C:\temp\test.shp")

# List of parts, each with list of vertex pairs
ListOfParts = []
ListOfParts.append([[0,1],[1,1],[1,0],[0,0],[0,1]])
ListOfParts.append([[0,2],[1,2],[1,1],[0,1],[0,2]])
ListOfParts.append([[0,3],[1,3],[1,2],[0,2],[0,3]])
ListOfParts.append([[1,1],[2,1],[2,0],[1,0],[1,1]])
ListOfParts.append([[1,2],[2,2],[2,1],[1,1],[1,2]])
ListOfParts.append([[1,3],[2,3],[2,2],[1,2],[1,3]])
ListOfParts.append([[2,1],[3,1],[3,0],[2,0],[2,1]])
ListOfParts.append([[2,2],[3,2],[3,1],[2,1],[2,2]])
ListOfParts.append([[2,3],[3,3],[3,2],[2,2],[2,3]])

# Array of parts to be passed to newRow()
ArrayOfParts = arcpy.Array()

# Add parts to array
for Part in ListOfParts:
    ArrayOfVertices = arcpy.Array()
    for Vertex in Part:
        ArrayOfVertices.add(arcpy.Point(Vertex[0],Vertex[1]))
    ArrayOfParts.add(ArrayOfVertices)
    ArrayOfVertices.removeAll()

# Output new feature
OutputFeature = OutputCursor.newRow()
OutputFeature.shape = ArrayOfParts
OutputCursor.insertRow(OutputFeature)

1
네 - arcpy.AsShape 방법은 문제가 있습니다 -이 결함이 행동의 또 다른 예 여기를 참조하십시오 gis.stackexchange.com/questions/10201/...
valveLondon

답변:


2

다각형 내부에 모양에 포함 할 점을 정의했습니다. 이것은 당신이 원하는 출력이 아닌 당신이 얻고있는 출력을 생성 할 것입니다. 이 프로그램은 다각형 정의에 넣은 각 점을 다각형의 정점을 정의하는 것으로 간주하므로 다각형 정의에 모든 정점을 포함하면 각 정점 사이에 모서리가있는 다각형이 반환됩니다. 링을 제거하려면 그리드의 각 상자에 대해 다각형을 별도로 만든 다음 다각형을 함께 녹여야합니다.

또는 위의 코드를 사각형에 외부 점만 포함하도록 다음과 같이 편집 할 수 있습니다.

import arcpy

arcpy.CreateFeatureclass_management(r"C:\temp", "test.shp", "POLYGON")
OutputCursor = arcpy.InsertCursor(r"C:\temp\test.shp")

# List of parts, each with list of vertex pairs
ListOfParts = []
ListOfParts.append([[0,3],[3,3],[3,0],[0,0],[0,3]])

# Array of parts to be passed to newRow()
ArrayOfParts = arcpy.Array()

# Add parts to array
for Part in ListOfParts:
    ArrayOfVertices = arcpy.Array()
    for Vertex in Part:
        ArrayOfVertices.add(arcpy.Point(Vertex[0],Vertex[1]))
    ArrayOfParts.add(ArrayOfVertices)
    ArrayOfVertices.removeAll()

# Output new feature
OutputFeature = OutputCursor.newRow()
OutputFeature.shape = ArrayOfParts
OutputCursor.insertRow(OutputFeature)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.