আর্কজিআইএস "ইন_মেমরি" ওয়ার্কস্পেসের জন্য সঠিক বাক্য গঠন এবং ব্যবহার কী?


33

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

আমার নির্দিষ্ট প্রশ্ন:

  • in_memoryআরকজিআইএস / আরকিপি ভিত্তিক স্ক্রিপ্টগুলিতে ওয়ার্কস্পেস ব্যবহারের উপযুক্ত ব্যবহার এবং বাক্য গঠন কী ?
  • in_memoryওয়ার্কস্পেস কি একইরূপ, উদাহরণস্বরূপ, ব্যবহার করে একটি স্তর তৈরি করা arcpy.MakeFeatureLayer_management()?
  • in_memoryস্ক্রিপ্টের শেষে ওয়ার্কস্পেস মোছার মতো কোনও মানদণ্ড রয়েছে ?

উত্তর:


41

আমি সম্প্রতি "ইন_মেমোরি" ব্যবহার করছি been এটি খুব কার্যকর হতে পারে, কারণ এটি নির্দিষ্ট কিছু কাজের জন্য নাটকীয়ভাবে প্রক্রিয়াজাতকরণের গতি বাড়ানোর সম্ভাবনা রাখে, তবে আপনি যদি খুব বড় ডেটাসেটের সাথে কাজ করছেন তবে এটি আপনার প্রোগ্রামটি ক্রাশের কারণ হতে পারে।

প্রক্রিয়া আউটপুটগুলি সংজ্ঞায়িত করতে আপনি "ইন_মেমরি" ব্যবহার করতে পারেন ... প্রায়শই, আমি যদি কোনও বৈশিষ্ট্য শ্রেণিতে কোনও কাজ সম্পাদন করি তবে আমি প্রথমে এটি "ইন_মেমরি" ওয়ার্কস্পেসে অনুলিপি করব:

inFeature = r'C:\myDir.gdb\myFeature'
memoryFeature = "in_memory" + "\\" + "myMemoryFeature"
arcpy.CopyFeatures_management(inFeature, memoryFeature)

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

আমি ভুল হতে পারি, তবে আমি বিশ্বাস করি এটি কোনও বৈশিষ্ট্য স্তর তৈরি করার মতো নয়। বৈশিষ্ট্য স্তরগুলি আপনাকে নির্বাচন পদ্ধতি এবং অন্যান্য স্তর নির্দিষ্ট ক্রিয়াকলাপগুলিতে অ্যাক্সেস দেয়। "ইন_মেমোরি" ডিরেক্টরিটিকে রাস্টার বস্তুর সমান ভেক্টর হিসাবে ভাবেন (রাস্টার = আরকিপি.আরস্টার (মাইস্টারস্টার লোকেশন))

"In_memory" ব্যবহার করার পরে পরিষ্কার করার জন্য কেবল নিম্নলিখিত কোডের লাইন যুক্ত করুন:

arcpy.Delete_management("in_memory")

আশা করি এইটি কাজ করবে.


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

12

এটির পুরোপুরি কিছুই নেই। একটি জাদু ডিরেক্টরি রয়েছে যা আপনি জিওপ্রসেসিং সরঞ্জামগুলিতে এবং নাম দেওয়া আরকিপি কার্সারে অ্যাক্সেস করতে পারবেন in_memory। আপনি নতুন ফিচারক্লাস বা টেবিল তৈরির মতো arcpy.management.CreateTable('in_memory', 'my_new_table')বা কিছু CreateFeatureClassকরতে চাইবেন। তারপরে সেই প্রক্রিয়াটিতে আপনার কাছে একটি নতুন টেবিল রয়েছে in_memory\my_new_table, আপনি যদি আর্কেম্যাপে থাকেন তবে এটি my_new_tableএমন সামগ্রীর সারণিতে একটি টেবিল ভিউ যুক্ত করবে যা আপনি এটিতে শর্টকাট হিসাবে ব্যবহার করতে পারবেন। যদি এটি মেমরি টেবিলের মধ্যে একটি অস্থায়ী arcpy.management.Delete(r'in_memory\my_new_table')হয় তবে আপনার স্ক্রিপ্টের শেষে এটি শেষ হয়ে গেলে কেবল ব্যবহার করুন ।


9

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

import arcpy
import tempfile
import os.path
import shutil

try:
    temp_dir = tempfile.mkdtemp()
    temp_gdb = "temp.gdb"
    arcpy.CreateFileGDB_management(temp_dir, temp_gdb)
    arcpy.env.workspace = os.path.join(temp_dir, temp_gdb)

    #Some processing...

except Exception, e:
    #handle exceptions here
    print e
finally:
    shutil.rmtree(temp_dir, True)

2
আরকিপি-র সাথে আর্কিপিআরস্টার () পদ্ধতিটি অন্তর্নিহিত রেস্টারদের সাথে ডিল করার একটি উপায় রয়েছে। মাইআস্টার = আরসিপি.আরস্টার ("সি: \ রাস্টলোকেশন") এর মত একটি ভেরিয়েবল সংজ্ঞায়িত করে আপনি মেমরিতে একটি রাস্টার অবজেক্ট তৈরি করেন যা মানচিত্রের বীজগণিত গণনা এবং অন্যান্য বিভিন্ন রাস্টার অপারেশনে সহজেই ব্যবহার করা যায়। মাইআস্টার.সেভ ("সি: \ সেভলোকেশন") লেখার মতো এ জাতীয় রাস্টার বস্তুটি সংরক্ষণ করা সহজ। একটি খুব সহায়ক বৈশিষ্ট্য যা আরকিপিটি টেবিলে নিয়ে আসে।
ব্লুফুট

@ ইগডেটি ফেয়ার কল। যদিও এটি বৃহত্তর ডেটাসেটগুলি পরিচালনা করে তা জানতে আগ্রহী।
ওম_নার্স 11:58

1
@ এম্বেডেনিটি - রাস্টার অবজেক্টটি আরকি স্ক্র্যাচ ওয়ার্কস্পেসে একটি রাস্টার লিখেছিল - যতটা সম্ভব দেরি করা যায়, যা আরকপিকে একক কক্ষ প্রক্রিয়াকরণ সরঞ্জাম (উদাহরণস্বরূপ "উদাহরণস্বরূপ" একক কার্যকর প্রক্রিয়াতে স্ট্যাক করে আই / ওকে অনুকূলিত করতে দেয়) , উদাহরণ স্বরূপ. সেভ () পদ্ধতিটি রাস্টার প্রক্রিয়াকরণ কার্যকর করতে বাধ্য করবে।
কার্টিস দাম 0

3
@om_henners in_memory আর্কজিআইএস 10.1-তে রাস্টারদের সমর্থন করে!
কার্টিস দাম 0

2
@ ওপেনার্স আরকিপি স্ক্র্যাচ নাম তৈরির জন্য একটি সরঞ্জাম সরবরাহ করে, এর সুবিধাগুলি রয়েছে উদাহরণস্বরূপ কোনও ফোল্ডারে একটি স্ক্র্যাচ বৈশিষ্ট্য শ্রেণি এতে স্বয়ংক্রিয়ভাবে ".shp" যুক্ত হয়েছে। পদ্ধতিটি হ'ল আরকিপি.ক্রিয়েটস্ক্র্যাচনেম ()।
কার্টিস মূল্য 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.