লোকেরা কীভাবে আর্কপাইতে পাইথন ডেটা স্ট্রাকচার এবং ক্লাস ব্যবহার করছে?


16

এই প্রশ্নটি প্রোগ্রামিং সম্পর্কে আমার অজ্ঞতা প্রকাশ করতে পারে তবে আমি কীভাবে আগ্রহী যে কীভাবে লোকেরা আর্কপাইয়ের মধ্যে বিভিন্ন পাইথন ডেটা স্ট্রাকচার ব্যবহার করছে।

এই পৃষ্ঠাটি পাইথনের ডেটা স্ট্রাকচারগুলি তালিকাভুক্ত করে। আমি বুঝতে পারছি কীভাবে জিআইএসে তালিকা কার্যকর করা যায় (বৈশিষ্ট্য শ্রেণীর তালিকা, বৈশিষ্ট্যগুলির তালিকা, ডেটা ফ্রেমের তালিকা ইত্যাদি)। আমি বুঝতে পারি কীভাবে সেটগুলিও ব্যবহার করা যেতে পারে (সদৃশগুলি সরাতে)। লোকেরা কীভাবে আর্কপাইয়ের মধ্যে টিপলস, অভিধান এবং অন্যান্য ডেটা স্ট্রাকচার বাস্তবায়ন করছে? এছাড়াও, তালিকাগুলি এবং সেটগুলির অন্যান্য উদাহরণ রয়েছে যা আমি তালিকাভুক্ত করিনি?

তদতিরিক্ত, সন্দেহ নেই, লোকেরা আর্কপাইতে কাস্টম ক্লাস তৈরি করছে। কোন পরিস্থিতিতে এবং পরিস্থিতিতে আপনার এগুলি প্রয়োজন? আপনি উদাহরণ প্রদান করতে পারেন? কেউ কি বিল্ট-ইন আরকিপি ক্লাসগুলির উত্তরাধিকার সূত্রে কাস্টম ক্লাস তৈরি করছে?

এই সমস্ত প্রশ্নের উত্তর আমার দরকার নেই, আমি কীভাবে জিআইএসে লোকেরা পাইথন ব্যবহার করছে এবং কী ওয়ার্কফ্লোতে এই কাস্টমাইজেশন প্রয়োজন ations


4
আকর্ষণীয় প্রশ্ন তবে এর একটি নির্দিষ্ট উত্তর নেই। একটি সম্প্রদায়ের উইকি হওয়া উচিত।
আর কে

উত্তর:


14

বহু অর্কেপি ফাংশন যা একাধিক ইনপুট নেয় পাইথন তালিকার অবজেক্ট গ্রহণ করে।

উদাহরণস্বরূপ Dissolve_managementফাংশনটি দ্রবীভূত হওয়ার জন্য ক্ষেত্রের নামের একটি তালিকা গ্রহণ করে:

arcpy.Dissolve_management("taxlots", "C:/output/output.gdb/taxlots_dissolved",
    ["LANDUSE", "TAXCODE"], "", "SINGLE_PART", "DISSOLVE_LINES")

একটি tuple একটি তালিকা স্থানে ব্যবহার করা যেতে পারে যখন আপনি, যেমন tuples হয় আদেশ বা উপাদানের সংখ্যা পরিবর্তন করতে প্রয়োজন হবে না অপরিবর্তনীয় । এগুলি ভিন্ন ভিন্ন সম্পর্কিত তথ্যের টুকরো যেমন একটি টাইমস্ট্যাম্পের উপাদান বা কোনও বিন্দুর স্থানাঙ্কের জন্য একটি দরকারী ডেটা কাঠামো। আপনি প্রায়শই টিপলগুলির তালিকা দেখতে পাবেন যেখানে একটি টিপল একটি নির্দিষ্ট সংখ্যক গুণাবলী সহ একটি স্বতন্ত্র রেকর্ড হিসাবে কাজ করে, যখন তালিকাটি সহজেই আকার পরিবর্তন করতে পারে, পুনরায় অর্ডার করা (সাজানো) ইত্যাদি ব্যবহারের বিষয়ে আরও জানতে স্ট্যাকওভারফ্লো প্রশ্নটি দেখুন তালিকার বনাম টিপলস।

তুলনামূলকভাবে ছোট কিন্তু ঘন ঘন ব্যবহৃত ব্যবহৃত কী-মান জোড়গুলির মেমোরিতে সেট করতে ক্যাশ করতে একটি অভিধানকে দ্রুত দেখার টেবিল হিসাবে ব্যবহার করা যেতে পারে। আমি আর্কজিআইএস ফোরামে এর একটি আকর্ষণীয় উদাহরণ দেখেছি: http://forums.arcgis.com/threads/55099-Update-cursor-with-joined-tables-work-around-w-dferences

তাদের যোগদানের পরিবর্তে অভিধানের ব্যবহার তাদের গণনাটি 3.5 ঘন্টা থেকে 15 মিনিটের মধ্যে বাড়িয়ে তোলে।

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

আরকেপিতে নিজেকে ব্যবহার করার জন্য পাইথনে কোনও ক্লাস লেখার দরকার আমি খুঁজে পাইনি, তবে এটি বলার অপেক্ষা রাখে না যে এরকম ব্যবহারের কেস নেই। আপনি যখন কিছু ইনপুট (ডেটা) এ কাজ করে যা ঘনিষ্ঠভাবে সম্পর্কিত ফাংশন (আচরণ) এর সেট থাকে তখন কোনও শ্রেণি কার্যকর হতে পারে এবং আপনি সেই ডেটা এবং আচরণগুলি কোনও অবজেক্ট-ভিত্তিক উপায়ে ব্যবহার করতে সক্ষম হতে চান তবে এটি আরও বেশি সম্ভবত ব্যবসায়-যুক্তিযুক্ত হতে হবে এবং আরকি সম্পর্কিত নয়।


7

Blah238 এই বিষয়টিকে ভালভাবে কভার করে, তাই আমি কেবল আমার নিজের কাজ থেকে বেশ কয়েকটি উদাহরণ যুক্ত করব। আমি প্রচুর বিমানবন্দর ডেটা বিকাশ করি এবং আমি নিয়মিত যা করতে পারি তার মধ্যে একটি রানওয়ে থেকে জরিপ করা রানওয়ে সেন্টারলাইন পয়েন্টগুলির সাথে সঠিকভাবে পড়তে হয়। আপনি ভাববেন যে এই পয়েন্টগুলি ইতিমধ্যে (জিআইএস ডাটাবেসে) যথাযথ হবে তবে এটি খুব কমই রয়েছে। সেন্টারলাইন পয়েন্টগুলি সেন্টারলাইন বরাবর প্রতি 10 ফুটের মধ্যে ঘটে এবং 10 ফুট দূরত্বে জরিপ পয়েন্টের দুটি আরও সারি দ্বারা উভয় পাশে ফ্ল্যাঙ্ক করা হয়। আপনি ছবিটি পাবেন: পয়েন্টগুলির আধিক্য ... এবং সাধারণত সমস্ত একসাথে ডাটাবেস-ভিত্তিতে মিশ্রিত হয়। আমি আমার স্ক্রিপ্টগুলিতে যা করছি তা দিয়ে, বৈশিষ্ট্যগুলি (বা স্থানিকভাবে প্রয়োজন হলে) দ্বারা কেন্দ্ররেখার পয়েন্টগুলি নির্বাচন করা সাধারণত সহজতর, প্রতিটিটির জন্য স্থানাঙ্কগুলি পড়ুন এবং ফলাফলগুলিকে পাইথন তালিকায় ফেলে দিন। আমি তখন বাছাই, পপ, বিপরীত ইত্যাদি করতে পারি

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

ক্লাস যতদূর যায়, ব্লাহ 238 এর মতো, আমি কোনও তৈরি করার প্রয়োজন খুঁজে পাইনি। আমার স্ক্রিপ্টগুলিতে ক্লাস পছন্দ করা হবে এমন কয়েকটি ঘটনা সম্ভবত রয়েছে তবে আমি সত্যিই সেই জায়গাগুলি সনাক্ত করতে সক্ষম হইনি। আরও প্রোগ্রামিং অভিজ্ঞতা আছে এমন কেউ সম্ভবত তাদের দ্রুত খুঁজে পেতে পারে would


5

আমি খুব ভালবাসেন অভিধান - ব্যবহারের 'ই.এম. সব সময়। এই পদ্ধতিটি কিছু স্থানিক রেফারেন্স বৈশিষ্ট্য পেয়ে থাকে এবং সমস্তগুলি ডিক্টে সংরক্ষণ করে:

def get_coord_sys(self, in_dataset):
    """Get and return info on dataset coord sys/projection"""
    spatial_ref = arcpy.Describe(in_dataset).spatialReference
    # Get spatial ref props and put in dictionary
    spat_ref_dict = {}
    spat_ref_dict["name"] = spatial_ref.name
    spat_ref_dict["type"] = spatial_ref.type
    spat_ref_dict["gcs_code"] = spatial_ref.GCSCode
    spat_ref_dict["gcs_name"] = spatial_ref.GCSName
    spat_ref_dict["pcs_code"] = spatial_ref.PCSCode
    spat_ref_dict["pcs_name"] = spatial_ref.PCSName
    return spat_ref_dict

এই পদ্ধতির স্নিপেট দুটি ফিচার ক্লাস থেকে পয়েন্ট জ্যামিতিগুলি বের করে, আমি পরে জ্যামিতিগুলি পরে কিছু ট্রিগ করার জন্য ব্যবহার করি:

def build_fields_of_view(self):
        """For all KOPs in a study area, build left, right, center FoV triangles"""
        try:    
            fcs = {os.path.join(self.gdb, "WindFarmArray"):[], os.path.join(self.gdb, "KOPs"):[]}
            # Build a dict of WTG and KOP array geometries, looks like:
            #  {'KOPs': [[1, -10049.2697098718, 10856.699451165374], 
            #            [2, 6690.4377855260946, 15602.12386816188]], 
            #   'WindFarmArray': [[1, 5834.9321158060666, 7909.3822339441513], 
            #                     [2, 6111.1759513214511, 7316.9684107396561]]}
            for k, v in fcs.iteritems():
                rows = arcpy.SearchCursor(k, "", self.sr)
                for row in rows:
                    geom = row.shape
                    point = geom.getPart()
                    id = row.getValue("OBJECTID")
                    v.append([id, point.X, point.Y])   

            kops = fcs[os.path.join(self.gdb, "KOPs")] # KOP array
            wtgs = fcs[os.path.join(self.gdb, "WindFarmArray")] # WTG array

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


উত্তরের জন্য ধন্যবাদ. এই ক্ষেত্রে অন্য ডেটা স্ট্রাকচারের চেয়ে অভিধান কেন একটি ভাল পছন্দ?
ফেজার

আমি আমার চাবি দ্বারা আমার মান কল করতে সক্ষম হতে চাই।
চাদ কুপার

2
ডিক্টস আরও বেশি পছন্দনীয় কারণ হ'ল তারা তালিকার চেয়ে অনেক দ্রুত পড়া হয় কারণ তাদের অর্ডার না দেওয়া হয়। অতএব, তাদের দীর্ঘ এন্ট্রি থাকলে খুব দীর্ঘ তালিকাগুলি প্রক্রিয়া করতে কিছুটা বেশি সময় নিতে পারে।
ndimhypervol

@ গোটানুকি ট্রু, এবং যদি আপনাকে বড় তালিকা ব্যবহার করতে হয় তবে পরিবর্তে একটি টিপল ব্যবহার করুন, কারণ সেগুলি তালিকাগুলির চেয়েও দ্রুত।
চাদ কুপার

2

পড়ুন এই সময় একসঙ্গে একটি উত্তর নির্বাণ এবং কিছু সম্পাদনা করতে ছিল ..

আমি পাইথন বিশেষজ্ঞ নই তবে আমি মনে করি ক্লাসগুলি ব্যবহার করার পেছনের ধারণাটি হ'ল আপনি এমন কোনও বস্তুর ইনস্ট্যান্ট করতে পারেন যার কাছে প্রচুর পদ্ধতিতে প্রস্তুত পদ্ধতি রয়েছে যা ডেটা কাঠামোর সাথে সম্পর্কিত এবং আপনার পদ্ধতিগুলি কেন্দ্রীকরণের সাথে সম্পর্কিত। ক্লাস বনাম মডিউলগুলির সাথে কিছু পরিবর্তনশীল সুযোগ সুবিধাও রয়েছে, উপরের লিঙ্কটি কিছুটা এই পর্যায়ে পৌঁছেছে।

আমার ফিচার লাইয়ার নামে একটি ক্লাস রয়েছে (সম্ভবত পাইথোনিক-লাই নেই ... এখনও শেখা হচ্ছে)। আমি করতে পারি

sys.path.append(r"\\Path\To\Scripts")
import gpFuncs as gpF
fc = arcpy.GetParameterAsText(0)
featureLayer = gpF.featureLayer(fc)
points = featureLayer.featureVerticesToPoints(featureid, "", first_and_last)

এটি করার সংজ্ঞাটি একটি শ্রেণিবদ্ধ পদ্ধতি যা কেবল বৈশিষ্ট্যগুলি, অংশগুলি এবং शिरोখণ্ডগুলি পুনরাবৃত্তি করে। তারপরে আমি আমার পয়েন্টগুলি অবজেক্টটিকে ফিচারলায়ার উদাহরণে পরিণত করতে এবং আমার ক্লাসে থাকা অন্যান্য জিনিসগুলি করতে পারি।

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


4
পরীক্ষা করে দেখুন পাইথন শৈলী গাইড (ওরফে PEP 8) নিয়মাবলী নামকরণ জন্য।
blah238

0

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

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