ArcPy bitişik, çok parçalı geometri yazarken hatalı iç halka ekliyor mu?


12

Bir şekil dosyasına çok parçalı geometri yazmak için Arcpy kullanırken garip bir sorunla karşılaştım. Ben köşe çiftleri listesini her parça listesinden çok parçalı bir özellik oluşturmak için bir InsertCursor kullanıyorum. Bu özellik oluşturulduğunda, bitişik birden çok parçanın otomatik olarak tek bir parçaya "çözüldüğünü" anlıyorum. Ama nedense, genellikle iç halkalar eklemek için gerekli olduğu gibi dizide bir Null arcpy.point () içermese de, bu bir iç halka oluşturur. İşte bir görselleştirme:

Arkpy hatasının görüntülenmesi

Bunun neden olduğu ve / veya sorunun üstesinden nasıl gelileceği hakkında bir fikri olan var mı?

Referans için, benim kod:

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
Evet - arcpy.AsShape yönteminde sorunlar var - bu kusurlu davranışın başka bir örneği için buraya bakın: gis.stackexchange.com/questions/10201/…
valveLondon

Yanıtlar:


2

Çokgenin iç kısmındaki şekle dahil edilecek noktaları tanımladınız. Bu, istediğiniz çıktıdan ziyade elde ettiğiniz çıktıyı yaratacaktır. Program, çokgen tanımına konan her noktayı çokgenin bir tepe noktasını tanımlayan olarak ele alır, bu nedenle çokgen tanımına tüm köşeleri eklerseniz, her tepe noktası arasında bir kenarı olan bir çokgen döndürür. Halkayı ortadan kaldırmak için ızgaradaki her kutu için ayrı olarak bir çokgen oluşturmanız ve daha sonra çokgenleri birlikte çözmeniz gerekir.

Alternatif olarak, yukarıdaki kodunuz yalnızca kare içindeki dış noktaları içerecek şekilde aşağıdaki şekilde düzenlenebilir:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.