ArcPy thêm vòng nội thất sai khi viết liền kề, nhiều hình học?


12

Tôi đã gặp phải một vấn đề kỳ lạ khi sử dụng Arcpy để viết hình học nhiều phần cho một shapefile. Tôi đang sử dụng một Chèn để tạo một tính năng nhiều phần từ một danh sách các phần với mỗi danh sách các cặp đỉnh. Tôi hiểu rằng khi tính năng này được tạo, nhiều phần liền kề sẽ tự động được "hòa tan" thành một phần duy nhất. Nhưng vì một số lý do, điều này đang tạo ra một vòng bên trong, mặc dù tôi không bao gồm Null arcpy.point () trong mảng như thường được yêu cầu để thêm các vòng bên trong. Đây là một hình dung:

Hình dung lỗi Arcpy

Có ai có bất kỳ ý tưởng tại sao điều này đang xảy ra và / hoặc làm thế nào để khắc phục vấn đề?

Để tham khảo, đây là mã của tôi:

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
Vâng - phương pháp arcpy.AsShape có vấn đề - xem tại đây để biết ví dụ khác về hành vi thiếu sót này: gis.stackexchange.com/questions/10201/iêu
vanLondon

Câu trả lời:


2

Bạn đã xác định các điểm trong phần bên trong của đa giác để bao gồm trong hình. Điều này sẽ tạo ra đầu ra bạn nhận được chứ không phải đầu ra bạn muốn. Chương trình coi mỗi điểm được đưa vào định nghĩa đa giác là xác định một đỉnh của đa giác, vì vậy nếu bạn bao gồm tất cả các đỉnh trong định nghĩa đa giác, nó sẽ trả về một đa giác có cạnh giữa mỗi đỉnh. Để loại bỏ vòng bạn sẽ cần tạo riêng một đa giác cho mỗi hộp trong lưới và sau đó hòa tan các đa giác lại với nhau.

Ngoài ra, mã của bạn ở trên có thể được chỉnh sửa như sau để chỉ bao gồm các điểm bên ngoài trong hình vuông:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.