আর্কজিআইএস ওয়াটারশেড সরঞ্জাম দ্বারা কোন অ্যালগরিদম ব্যবহার করা হয়?


10

আর্কজিআইএস ওয়াটারশেড সরঞ্জামে (স্পেসিয়াল অ্যানালিস্ট প্যাকেজে) কোন ধরণের অ্যালগরিদম ব্যবহৃত হয় তা কি কেউ জানেন?

এসরির ওয়েবসাইটে দেওয়া খুব সামান্য তথ্য ... তবে আমার সন্দেহ হয় এটি একরকম গভীরতা / প্রস্থ অনুসন্ধান হতে পারে।

আমি এই আরকিজিআইএস অনলাইন সহায়তা পৃষ্ঠাগুলি দেখেছি:

সুতরাং হ্যাঁ, এটি প্রবাহের দিকের রাস্টার ব্যবহার করে তবে রাস্টারটিকে অতিক্রম করার জন্য এটি কোন অ্যালগরিদম ব্যবহার করছে?

দয়া করে মনে রাখবেন, আমি 'এটি ডি 8 ব্যবহার করে ..' এর লাইনে উত্তর খুঁজছি না ... ডি 8 আসলে একটি অ্যালগরিদম নয়, তবে আপনি যে অ্যালগরিদমটি ব্যবহার করবেন তা সংজ্ঞায়িত করতে সহায়তা করার জন্য একটি মডেল। IE আপনি ডি 8 স্কিমটি গভীরতার সাথে প্রথম অনুসন্ধান অ্যালগরিদম এবং / অথবা প্রস্থের প্রথম অনুসন্ধান অ্যালগরিদমের মধ্যে প্রয়োগ করতে পারেন


জেমস, আমি একই জিনিসটি করার চেষ্টা করছি, অর্থাত্, একটি অ্যাপ্লিকেশন তৈরি করুন যা একটি দৃ .় স্থানাঙ্ক গ্রহণ করে এবং আমাদেরকে জলছবি বর্ণনামূলক রূপ দেয়। আমি পাইথন ব্যবহার করছি। আমাদের অগ্রগতি সম্পর্কে কথা বলা যাক।

আমি পাইথনও ব্যবহার করছি। আমি একটি প্রবাহের দিকের গ্রিড গণনা এবং সেখান থেকে এগিয়ে যাওয়ার সহজ সমস্যাটি দিয়ে শুরু করছি।
জেমস

উত্তর:


6

যে পদ্ধতিটি আমি কয়েকটি ভাষায় প্রয়োগ করেছি এবং বিশ্বাস করি যে ইএসআরআই ব্যবহার করে (দুঃখিত, জেনসন এবং ডোমিংয়ে এই পৃষ্ঠার অন্যত্র उद्धृत করা ব্যতীত অন্য কোনও রেফারেন্স) ব্যবহারকারীর সরবরাহিত "pourালাই-পয়েন্ট" সেল বা একটি কোষ থেকে শুরু করা উচিত প্রবাহের দিকের গ্রিড (এফডিআর) এর প্রান্তে, তার বর্তমান আটটি প্রতিবেশী কোনটি বর্তমান কোষে প্রবাহিত হয় তা সন্ধান করতে তার আটটি প্রতিবেশী পরীক্ষা করুন এবং আউটপুট গ্রিডের সেই কোষগুলিকে বর্তমান "ওয়াটারশেড" এ নিয়োগ করুন। তারপরে ফাংশনটি বার বার প্রতিটি প্রবাহিত প্রতিবেশীর জন্য নিজেকে পুনরায় কল করে। সমস্ত প্রবাহিত কোষ একটি pourালা-পয়েন্টের জন্য অবসন্ন না হওয়া অবধি এই প্রক্রিয়াটি পুনরাবৃত্তি করবে এবং তারপরে সমস্ত pourালা-পয়েন্টগুলির জন্য পুনরাবৃত্তি করবে।

রিকার্সিভ অ্যালগরিদম ডিজাইনটি বেশ ব্যয়বহুল হতে পারে কারণ এটি মেমরিতে প্রচুর ডেটা ধরে রাখার চেষ্টা করে, ডিস্কে / পৃষ্ঠার অদলবদল করতে পারে, এবং তাই সাধারণত i / o ধীর গতির ক্ষতি করে।

(পুনরাবৃত্তির বিভিন্ন পদ্ধতি সম্পর্কে নীচে whuber এর মন্তব্য দেখুন, আপনি যদি RYO করছেন)

_____________ সম্পাদনা করুন _____________

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

কোড: ব্যাখ্যা: idirপ্রবাহের দিকের মানগুলির রাস্টার। offsetকেন্দ্র বিশিষ্ট হওয়া কেন্দ্রটিকে বোঝায় এবং offসেই ঘরের প্রতিবেশী প্রত্যেককে পরীক্ষা করে। এটি অন্য ফাংশনকে কল করে does_it_flow_into_me, যা পার্শ্ববর্তী সেলটির ফ্লোডির বর্তমান সেলটিতে নির্দেশ করে কিনা তা সম্পর্কে একটি বুলিয়ান দেয়। যদি প্রতিবেশীর পক্ষে সত্য হয়, তবে সেই অবস্থানটিতে পুনরাবৃত্তি করুন।

void shed(int init_x, int init_y, int basin_id){

int i, j, offset, off, flow_dir;

offset = ((init_y - 1) * nc) + (init_x - 1);
*(basin + offset) = basin_id;


/* kernel analysis */
for (i = -1; i <  2; i++) {
    for (j = -1; j <  2; j++) {
        if ((i) || (j)) {

            off = offset + (j * nc +  i);
            flow_dir = *(idir + off);


            if (does_it_flow_into_me(i,j,flow_dir)){
                shed(init_x+i, init_y+j,basin_id);
            }
        } /*not center */
    } /* do - j */
} /* do - i */
}

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

অবশ্যই একটি আবর্জনা-মধ্যে-আবর্জনা সমস্যা। আমি এবং সর্বাধিক জিআইএসএস যা করব তা ইনপুট পরিষ্কার করবে না! আমার হ্যাকের উপরে কিছু পোলিশ রাখার জন্য গভীরতার-প্রথম পুনরাবৃত্তির সন্ধান করা উচিত বলে মনে হচ্ছে।
রোল্যান্ড

আমি এটিকে আবর্জনা মনে করি না - মনে রাখবেন, বাস্তবায়নটি কীভাবে ভাঙা যায় তা বিবেচনা না করেই, মূল ইনপুটটি কারও ডি 8 কোডিংয়ের চেয়ে নিজেই ডিএমইম হয় - তবে এটি অবশ্যই একটি চ্যালেঞ্জ। বাস্তব বিশ্বে এমন অনেকগুলি জায়গা রয়েছে যা এত সমতল যে প্রবাহের দিক নির্ধারণ করা কঠিন: যে কোনও স্থির জলছবি একটি ভাল উদাহরণ। বাস্তবে আপনাকে হ্রদ এবং অন্যান্য সমতল অঞ্চলগুলির আউটলেটগুলি খুঁজে বের করতে হবে এবং আপনার একাধিক আউটলেট রয়েছে এমন সমতল অঞ্চলগুলির সাথে লড়াই করতে হবে । এর জন্য অ-স্থানীয় অনুসন্ধান প্রয়োজন, যা করা শক্ত।
whuber

আমি তখন বিভ্রান্ত। আমি ভাবছি যে আমরা help.arcgis.com/en/arcgisdesktop/10.0/help../index.html#//… নিয়ে আলোচনা করছি , যা ইনপুট হিসাবে ফ্লোডিরকে নেয়। আমি যদি বাকিটা খুব কাছ থেকে না পড়ে থাকি তবে আমাদের আগাছায় টানতে চাই না!
রোল্যান্ড

না, আমি মনে করি আপনি ঠিক বলেছেন: প্রশ্নটি পুনরায় পড়ার সাথে সাথে আমি দেখতে পাচ্ছি যে এটি প্রবাহের দিকের রাস্টারকে ইনপুট হিসাবে প্রক্রিয়াকরণের দিকে বিশেষভাবে জোর দিয়েছিল, তার চেয়ে বেশি যে পরিস্থিতিটি আমি কল্পনা করছিলাম than এটি সরাসরি এবং অন্তর্দৃষ্টি এবং সহায়ক পয়েন্টার সহ সম্বোধন করার জন্য আপনার উত্তরটি +1 করুন।
whuber

4

ArcGIS সাহায্যের বলেছেন:

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

D8 পদ্ধতিটি ব্যবহার করে ডিএমই থেকে ফ্লো দিকনির্দেশনা গণনা করা হয় , যেখানে প্রতিটি ঘরের জন্য গণনা করে প্রবাহটি বিমূর্ত করা হয়, যার 8 টি প্রতিবেশী, এই ঘরটির জল প্রবাহিত হবে।

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


কয়েক বছর আগে, আমি ওয়াটারশেড ডিলিনেশন প্রকল্পে কাজ করছিলাম এবং ডি 8 পদ্ধতিটি ব্যবহার করে আরকজিআইএসের কারণে আমরা বেশ কয়েকটি সমস্যার মুখোমুখি হয়েছিলাম। দুটি প্রধান সমস্যা ছিল

  • ডি 8 কেবলমাত্র ইউএনআই নির্দেশিক প্রবাহকে অনুমতি দেয়। এক কোষ থেকে জল কেবল একদিকে প্রবাহিত হতে পারে।
  • উত্পন্ন স্রোতের প্রবাহটিটি তির্যক অক্ষের সাথে একটি বিশাল পক্ষপাত ছিল। এটি অদ্ভুত সন্ধানী স্ট্রিমগুলিকে জন্ম দিয়েছে।

আমাদের তথ্য থেকে, আমরা জানতাম যে এই দুটি সমস্যা বড় সমস্যা, তাই হাইব্রিড পদ্ধতিগুলি ব্যবহার করে প্রবাহের দিকনির্দেশ উত্পন্ন করার জন্য আমি কয়েকটি সরঞ্জাম তৈরি করেছি।

আমার প্রথম দিকের কাজগুলির মধ্যে একটি ছিল ক্যাচমেন্ট ক্যালকুলেশন সরঞ্জামকে প্রকৃত বিপরীতে ইঞ্জিনিয়ার। আমি দেখতে পেলাম যে এটি যৌক্তিকভাবে বেশ সহজ ছিল। যদি আপনি প্রদত্ত বিন্দুটির (যেমন pourালা পয়েন্টও বলা হয়) এর সন্ধান পেতে চান তবে আপনি প্রথমে এটির মধ্যে কোষটি খুঁজে পাবেন। প্রায়শই আপনি প্রদত্ত সহনশীলতায় সর্বাধিক প্রবাহের সঞ্চারের সাথে এটিকে বিন্দুতে নেওয়ার চেষ্টা করবেন।

এই কক্ষের জন্য আপনি আশেপাশের সমস্ত কক্ষগুলি এটির জন্য অবদান রাখবেন। এই প্রতিবেশী প্রতিটি কক্ষের জন্য, আপনি এমন কোষগুলি খুঁজে পান যা সেগুলিতে অবদান রাখে ইত্যাদি। আপনি এই পুনরাবৃত্ত প্রক্রিয়াটি অবিরত রাখুন যতক্ষণ না আপনি কোনও নতুন ঘর আবিষ্কার করেন না। আপনি যখন রিজ লাইন বা ওয়াটারশেড সীমানায় পৌঁছেছেন তখনই।

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


ব্যাখ্যার জন্য আপনাকে ধন্যবাদ। তবে জলাশয়গুলি সন্ধান করতে ডি 8 দিকনির্দেশগুলি ব্যবহার করার জন্য অ্যালগরিদম কী ? Dmahr এর উত্তর অনুসরণ করে মন্তব্য দেখুন ।
হুড়হুড়ি করে

হাই, ধন্যবাদ তবে এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি এই বাক্যটি দিয়েছিলেন "এই সেলটির জন্য আপনি আশেপাশের সমস্ত কক্ষগুলি এটির জন্য অবদান রাখবেন these সেই অনুসন্ধানটি কার্যকর করার জন্য অনেকগুলি পৃথক অ্যালগরিদম রয়েছে। প্রশ্নটি কোনটি
জেমস

4

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

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

জেনসন এবং ডমিংগু (1988) কাগজের একটি অনুলিপি এখানে পাওয়া যায়

ইনপুট হিসাবে ফ্লো দিকনির্দেশের রাস্টারগুলি ব্যবহার করে এমন সমস্ত সরঞ্জামই এই প্রবাহের দিকনির্দেশ মডেলটিকে অ্যাসোসিয়েশন দ্বারা ব্যবহার করে। এর মধ্যে রয়েছে ওয়াটারশেড, ফ্লো একিউমুলেশন, ফ্লো দৈর্ঘ্য, ভরাট ইত্যাদি includes


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

ওয়াটারশেড সরঞ্জামটি pourালা পয়েন্টগুলি থেকে প্রবাহের দিকের রাস্টারটি নেভিগেট করে। এটি ফ্লো একিউমুলেশন সরঞ্জামটির বিপরীত, সেলগুলির সংখ্যা বর্ণনা করে আউটপুট রাস্টার পরিবর্তে এটি pourালা পয়েন্টের আইডি রিপোর্ট করে।
dmahr

1
ঠিক আছে, আমি অনুমান করি আমার আরও কিছু নির্দিষ্ট হওয়া দরকার। আমি এটি জানি কি ধারণা। আমি জানি না কী অ্যালগরিদম প্রয়োগ করা হয়। আমি মনে করি এটি এক ধরণের অনুসন্ধান অ্যালগরিদম, তবে এটি এখনও হতে পারে; প্রস্থ-প্রথম, গভীরতা-প্রথম, পুনরাবৃত্তি-গভীরতা গভীরতা-প্রথম ইত্যাদি ...
জেমস

1
ধন্যবাদ dmahr। @ ভুবার: আমি যতদূর জানি, বিভিন্ন অনুসন্ধান অ্যালগরিদম কিছুটা আলাদা ফলাফল দিতে পারে? এবং হ্যাঁ, জেনেরিক অ্যালগরিদম সন্ধান করা কোনও সমস্যা নয়, তবে ইএসআরআই কীভাবে জলছবি-নির্দিষ্ট অঞ্চলগুলি পরিচালনা করে (যেমন একটি ডিটিএমের সমতল অংশ) দরকারী তা শেখা।
জেমস

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

0

এই প্রশ্নের আরও চিন্তাভাবনা দেওয়ার জন্য, আমি তোরণটিতে একটি জলাশয় বিশ্লেষণ চালিয়েছি: আমি একটি (ভরা) ডিএম নিয়েছি, প্রবাহের দিকটি গণনা করেছি এবং কয়েকটি পয়েন্ট রেখেছি যা পূর্বে গণনা করা স্ট্রিম নেটওয়ার্কের অবস্থানগুলির সাথে সামঞ্জস্য করে। আমি 'ওয়াটারশেড' সরঞ্জামটি চালিয়েছি এবং এটি আমাকে কয়েকটি চমৎকার অববাহিকা উপহার দিয়েছে, যা বেশিরভাগ অংশে "উজানের" অংশকে আবৃত করে তোলে (যেমনটি আপনি আশা করবেন):

জলাবদ্ধ চিত্র

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

সিউডো (ইশ) কোড:

class d8():
    def __init__(self, arr):
       self.catchment = set()
       self.arr = arr

    def search(self, node):
        """ Searches all neighbouring nodes to find flow paths """ 

        # add the current node to the catchment
        self.catchment.add(node)

        # search the neighbours, ignore ones we already visited
        for each_neighbour:
            if neighbour is in self.catchment:
               do nothing

            # if the neighbour flows into the current node, visit that neighbour
            elif neighbour_flows_into_me:
               self.search(neighbour)

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

আমি কি ভুল করছি কেউ জানেন?

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