Saya telah mengalami masalah aneh ketika menggunakan Arcpy untuk menulis geometri multipart ke sebuah shapefile. Saya menggunakan InsertCursor untuk membuat fitur multi bagian dari daftar bagian masing-masing dengan daftar pasangan titik. Saya mengerti bahwa ketika fitur ini dibuat, beberapa bagian yang berdekatan secara otomatis "dibubarkan" menjadi satu bagian. Tetapi untuk beberapa alasan, ini menciptakan cincin interior, meskipun saya tidak memasukkan Null arcpy.point () dalam array seperti yang biasanya diperlukan untuk menambahkan cincin interior. Berikut visualisasi:
Adakah yang tahu mengapa ini terjadi dan / atau bagaimana mengatasi masalah ini?
Untuk referensi, ini kode saya:
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)