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)
arcgis-desktop
arcpy
dmahr
sumber
sumber
Jawaban:
Anda telah menentukan titik di bagian dalam poligon untuk dimasukkan dalam bentuk. Ini akan membuat output yang Anda dapatkan daripada output yang Anda inginkan. Program memperlakukan setiap titik yang dimasukkan ke dalam definisi poligon sebagai mendefinisikan titik dari poligon, jadi jika Anda memasukkan semua simpul dalam definisi poligon itu akan mengembalikan poligon dengan tepi antara setiap titik. Untuk menghilangkan cincin, Anda perlu membuat poligon secara terpisah untuk setiap kotak di kisi dan kemudian melarutkan poligon bersama-sama.
Atau, kode Anda di atas dapat diedit sebagai berikut untuk hanya memasukkan titik-titik eksterior di kotak:
sumber