আরকিপি সংলগ্ন, মাল্টিপার্ট জ্যামিতি লেখার সময় ভ্রান্ত অভ্যন্তরের রিং যুক্ত করে?


12

আরকিপি ব্যবহার করার সময় আমি কোনও অদ্ভুত সমস্যায় পড়েছি a আমি ভার্টেক্স জোড়গুলির তালিকার প্রতিটি অংশের তালিকা থেকে একাধিক বৈশিষ্ট্য তৈরি করতে একটি 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
হ্যাঁ - আরকিপি.এইশপ পদ্ধতিতে সমস্যা রয়েছে - এই ত্রুটিযুক্ত আচরণের আরও একটি উদাহরণের জন্য এখানে দেখুন: gis.stackexchange.com/questions/10201/…
ভালভ লন্ডন

উত্তর:


2

আকারে অন্তর্ভুক্ত করার জন্য আপনি বহুভুজের অভ্যন্তরের পয়েন্টগুলি সংজ্ঞায়িত করেছেন। এটি আপনার আউটপুটটির চেয়ে আউটপুট তৈরি করবে যা আপনি চাইছেন than প্রোগ্রামটি বহুভুজের সংজ্ঞাটিতে রাখা প্রতিটি বিন্দুটিকে বহুভুজের একটি অনুভূমিকাকে সংজ্ঞায়িত হিসাবে বিবেচনা করে, সুতরাং যদি আপনি বহুভুজ সংজ্ঞাটিতে সমস্ত শীর্ষকে অন্তর্ভুক্ত করেন তবে এটি প্রতিটি শীর্ষবিন্দুর মধ্যবর্তী একটি প্রান্তযুক্ত একটি বহুভুজকে ফিরিয়ে দেবে। রিংটি অপসারণ করতে আপনাকে গ্রিডে প্রতিটি বাক্সের জন্য আলাদাভাবে বহুভুজ তৈরি করতে হবে এবং তারপরে বহুভুজগুলি একসাথে দ্রবীভূত করতে হবে।

বিকল্পভাবে, উপরের আপনার কোডটি বর্গক্ষেত্রে কেবলমাত্র বাহ্যিক পয়েন্টগুলি অন্তর্ভুক্ত করার জন্য নিম্নরূপে সম্পাদনা করা যেতে পারে:

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.