আর্কপাইয়ের জ্যামিতির জন্য কি স্থানিক অনুসন্ধানের কাজ রয়েছে?


10

আমার সমস্যা: আরকিপি ব্যবহার করে আমি বাফারগুলি লুপ করতে চাই এবং প্রতিটি বাফারের ভিতরে জ্যামিতি_ফিটচারগুলি নির্বাচন করতে চাই এবং নির্দিষ্ট বাফারের মধ্যে কেবলমাত্র অবজেক্টগুলিই কিছু (আপডেট) করতে পারি। নীচের কোডটি ব্যাখ্যা করে আমি কী করতে চাই (কম বা কম):

def _update_connections_inside_buffers(self):
    buffers = arcpy.SearchCursor(self.__buffer_class_name)
    in_layer = "connections"
    for i_buffer in buffers:
        shape = i_buffer.shape
        # can not use a geometry to do a selection.. very inconvenient!!
        connections = arcpy.SelectLayerByLocation_management(in_layer, "WITHIN", shape) 
        self._update_connections(connections)

তবে: এটি কাজ করবে না কারণ সিলেক্টলায়ারবাইলোকেশন_ম্যানেজমেন্ট () জ্যামিতিটিকে "আকৃতি" হিসাবে আর্গুমেন্ট হিসাবে গ্রহণ করে না তবে একটি বৈশিষ্ট্য_ক্লাস_নাম (স্তরের নাম) প্রত্যাশা করে। এমন কোনও আরকি পদ্ধতি রয়েছে যা একটি স্থানিক শিকারী ব্যবহার করে অনুসন্ধান করতে পারে। ইএসআরআই ম্যানুয়াল থেকে এটি কীভাবে করা যায় তা আমি খুঁজে পাইনি।

উত্তর:


13

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

অথবা, সম্ভবত আমি মনে করি এটি সিলেক্টায়ারবাইলোকারেশনের পাশের "সংযোগগুলি =" যা আপনাকে আপনার সমস্যা দিচ্ছে কারণ আপনি কোনও ফলাফল অবজেক্টে সেট করে রেখেছেন এবং এটিকে আবার পাস করার আগে এটি থেকে কোনও কিছু বের করে নিচ্ছেন না।

import arcpy
schoolsLayer = "Schools"
suburbsLayer = "Suburbs"
# get an update cursor as we will be changing values
rows = arcpy.UpdateCursor(suburbsLayer)
# loop through each suburb in the layer
for row in rows:
    polygon = row.SHAPE
    arcpy.SelectLayerByLocation_management(schoolsLayer,"INTERSECT",polygon)

2

এটি করা যেতে পারে তবে যতদূর আমি জানি কেবলমাত্র বৈশিষ্ট্য স্তর ডাব্লু / আরকিপি ব্যবহারের মাধ্যমে। মূলত আপনি একটি ক্লজ তৈরি করুন এবং এটি ওআইডি (বা অন্যান্য অনন্যভাবে চিহ্নিত ক্ষেত্র) এর সাথে আপডেট করুন এবং সিলেক্টায়ারবায়লোকেশনের মাধ্যমে লুপ করুন।

পরীক্ষা করে দেখুন এই টিউটোরিয়াল পিএসইউ মাস্টার্স প্রোগ্রাম থেকে এটা প্রায় কাছাকাছি ঠিক কি আপনি পরে থাকেন যদি আমি ভুল না করে থাকি জুড়ে।

জ্যামিতির কোনও রেফারেন্স প্রয়োজন নেই; স্থানিক ক্যোয়ারী আপনি কী ধরণের ক্যোয়ারী সংজ্ঞায়িত করেন (যেমন সম্পূর্ণরূপে অন্তর্ভুক্ত থাকে, একটি সীমানা ভাগ করে দেয় ইত্যাদি) জ্যামিতি ব্যবহার করে। যদি আপনাকে এই পয়েন্টগুলির জ্যামিতিটি উল্লেখ করতে হয়, তবে তারা একবার বাফারের মধ্যে থাকার জন্য দৃ determined়প্রতিজ্ঞ হয়ে গেলে তাদের (ওআইডি) একটি অজগর তালিকায় যুক্ত করুন এবং যেখানে কোনও ধারা ব্যবহার করে মূল ডেটা সেট নিয়ে কাজ করুন।


আমি সমস্যার সমাধান খুঁজে পেয়েছি। ক্লাস_লেয়ারকে স্ট্রিং রেফারিংয়ের পরিবর্তে আমাকে প্রথম যুক্তি হিসাবে একটি ফিচার_লেয়ার দিতে হয়েছিল।
ব্যবহারকারী 8175

1

আমি সমস্যার সমাধান খুঁজে পেয়েছি। ক্লাস_লেয়ারকে স্ট্রিং রেফারিংয়ের পরিবর্তে আমাকে প্রথম যুক্তি হিসাবে একটি ফিচার_লেয়ার সরবরাহ করতে হয়েছিল। "

    # Make a feature layer from the feature class
    class_layer = arcpy.env.workspace + "." + "connections"
    arcpy.MakeFeatureLayer_management(class_layer, "feature_layer")

    # Do selection using feature_layer 
    arcpy.SelectLayerByLocation_management("feature_layer", "WITHIN", p_polygon)

    # get result
    connections_found_in_polygon = arcpy.SearchCursor("feature_layer")
    self._update_connections(connections_found_in_polygon)

3
আমি বেশ নিশ্চিত যে পলিজিওর উত্তর এটি জুড়েছে। কোনও বৈশিষ্ট্য শ্রেণি এবং বৈশিষ্ট্য স্তরের মধ্যে পার্থক্যটি নোট করতে আপনার সতর্ক হওয়া উচিত ।
blah238
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.