चापलूसी, मल्टीआर्ट ज्योमेट्री लिखते समय ArcPy त्रुटिपूर्ण आंतरिक वलय को जोड़ता है?


12

जब मैं आकृति के लिए मल्टीपार्ट ज्यामिति लिखने के लिए आर्कपी का उपयोग कर रहा हूं तो मैं एक अजीब मुद्दे पर भाग गया हूं। मैं शीर्ष जोड़ी की सूची के साथ प्रत्येक भाग की एक सूची से एक मल्टीपार्ट सुविधा बनाने के लिए एक InsertCursor का उपयोग कर रहा हूं। मैं समझता हूं कि जब यह सुविधा बनाई जाती है, तो आसन्न कई भाग स्वचालित रूप से "भंग" हो जाते हैं। लेकिन किसी कारण के लिए, यह एक आंतरिक रिंग बना रहा है, भले ही मैंने सरणी में एक नल आर्कपी (बिंदु) शामिल नहीं किया था, जैसा कि आमतौर पर इंटीरियर रिंग को जोड़ने के लिए आवश्यक होता है। यहाँ एक दृश्य है:

चापलूसी त्रुटि का दृश्य

किसी को भी पता नहीं है कि ऐसा क्यों हो रहा है और / या इस मुद्दे को कैसे दूर किया जाए?

संदर्भ के लिए, यहां मेरा कोड है:

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/…
वाल्वलेंडन

जवाबों:


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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.