ArcGIS वाटरशेड टूल द्वारा किस एल्गोरिथ्म का उपयोग किया जाता है?


10

क्या किसी को पता है कि आर्कगिस वाटरशेड टूल (स्पेसियल एनालिस्ट पैकेज में) को किस प्रकार के एल्गोरिदम का उपयोग किया जाता है?

Esri की वेबसाइट पर दी गई बहुत कम जानकारी ... लेकिन मुझे संदेह है कि यह किसी प्रकार की गहराई / चौड़ाई खोज हो सकती है।

मैंने इन ArcGIS ऑनलाइन सहायता पृष्ठों को देखा है:

तो हाँ, यह प्रवाह दिशा रेखापुंज का उपयोग करता है, लेकिन यह किस एल्गोरिथ्म का उपयोग करके रेखापुंज को पार करता है?

कृपया ध्यान दें, मैं 'D8 का उपयोग करता हूं' की तर्ज पर उत्तर नहीं खोज रहा हूं ।... D8 वास्तव में एक एल्गोरिथ्म नहीं है, लेकिन आपके द्वारा उपयोग किए जाने वाले एल्गोरिदम को परिभाषित करने में मदद करने के लिए एक मॉडल है। IE आप डी-स्कीम को गहराई-पहले खोज एल्गोरिथ्म और / या चौड़ाई-प्रथम खोज एल्गोरिदम में लागू कर सकते हैं


जेम्स, मैं एक ही काम करने की कोशिश कर रहा हूं, यानी, एक ऐप बनाएं जो एक निर्धारित समन्वय ले और हमें एक वाटरशेड परिसीमन दे। मैं अजगर का उपयोग कर रहा हूं। हमारी प्रगति के बारे में बात करते हैं।

मैं भी पायथन का उपयोग कर रहा हूं। मैं एक प्रवाह दिशा ग्रिड की गणना की सरल समस्या के साथ शुरू कर रहा हूं और वहां से आगे बढ़ रहा हूं।
जेम्स

जवाबों:


6

जिस विधि को मैंने कुछ भाषाओं में लागू किया है और मानता है कि ESRI का उपयोग करता है (क्षमा करें, इस पृष्ठ में कहीं और जेंसन और डोमिंग्यू के अलावा कोई संदर्भ नहीं दिया गया है) एक उपयोगकर्ता द्वारा प्रदान की गई "पी-पॉइंट" सेल या एक सेल शुरू करना है प्रवाह दिशा ग्रिड (fdr) के किनारे पर, अपने आठ पड़ोसियों की जांच करें कि वर्तमान सेल में कौन से प्रत्यक्ष प्रवाह हैं, और उन कोशिकाओं को आउटपुट ग्रिड में वर्तमान "वाटरशेड" में असाइन करें। फिर फ़ंक्शन पुनरावर्ती पड़ोसी के प्रत्येक के लिए एक बार खुद को कॉल करता है। यह प्रक्रिया तब तक दोहराई जाती है जब तक कि सभी प्रलोभन कोशिकाएं एक पाइंट-पॉइंट के लिए समाप्त नहीं हो जाती हैं, और फिर सभी पियर-पॉइंट्स के लिए दोहराएंगी।

पुनरावर्ती एल्गोरिथ्म डिज़ाइन बहुत महंगा हो सकता है क्योंकि यह मेमोरी में बहुत सारे डेटा को होल्ड करने की कोशिश कर सकता है, डिस्क पर स्वैप / पेज कर सकता है, और इसलिए आमतौर पर i / o धीमा हो जाता है।

(रिकवर के विभिन्न तरीकों के बारे में व्हिबर की टिप्पणी नीचे देखें, यदि आप RYO के हैं)

_____________ EDIT _____________

एक उदाहरण के रूप में मेरे पुराने सी कोड को खोदें (ध्यान दें: हालांकि अधिकांश अजगर कमरे से भागना चाहते हैं, बहुत बुरा नहीं होना चाहिए)। यह वर्णन करने के लिए ब्याज की हो सकती है। हालाँकि मैं अब केवल सतही परिचित w / चौड़ाई-पहले बनाम गहराई-पहली पुनरावृत्ति के बारे में सोच रहा हूँ, मेरी दिनचर्या वास्तव में गहराई-पहले है (और यह कि ऊपर मेरी प्राकृतिक भाषा का वर्णन भ्रामक था) इस स्टैकओवरफ़्लो पोस्टिंग के आधार पर (उम्मीद है @) व्हुबेर या किसी अन्य व्यक्ति की तुलना में मुझसे अधिक होशियार / पुष्टि कर सकते हैं)।

कोड: स्पष्टीकरण: 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

निश्चित रूप से एक कचरा-इन-कचरा बाहर मुद्दा। मैं और अधिकांश GIss इनपुट को साफ नहीं करेंगे! लगता है कि मुझे अपने हैक पर कुछ पॉलिश लगाने के लिए गहराई-पहले पुनरावृत्ति देखने की आवश्यकता है।
रोलैंड २

मुझे नहीं लगता कि यह कचरा है - याद रखें, कार्यान्वयन के टूटने की परवाह किए बिना, मूल इनपुट किसी के डी 8 कोडिंग के बजाय डीईएम ही है - लेकिन यह निश्चित रूप से एक चुनौती है। वास्तविक दुनिया में कई जगहें हैं जो इतनी सपाट हैं कि प्रवाह की दिशा निर्धारित करना मुश्किल है: कोई भी स्थिर जल एक अच्छा उदाहरण है। वास्तव में आपको झीलों और अन्य सपाट क्षेत्रों के आउटलेट खोजने की आवश्यकता होती है और आपको उन फ्लैट क्षेत्रों का सामना करना पड़ता है जिनमें कई आउटलेट होते हैं। इसके लिए गैर-स्थानीय खोजों की आवश्यकता होती है , जो करना मुश्किल है।
whuber

मैं शायद उलझन में हूँ। मैं सोच रहा हूं कि हम help.arcgis.com/en/arcgisdesktop/10.0/help../index.html#//… पर चर्चा कर रहे हैं , जो इनपुट के रूप में फ्लॉदिर लेता है। अगर हम बाकी को बारीकी से नहीं पढ़े हैं तो हमें मातम में नहीं खींचना चाहते हैं!
रोलैंड २

नहीं, मुझे लगता है कि आप सही हैं: जैसा कि मैंने प्रश्न को फिर से पढ़ा है, मुझे लगता है कि यह विशेष रूप से इनपुट दिशा के रूप में प्रवाह दिशा रेखापुंज को संसाधित करने पर केंद्रित है, बजाय सामान्य स्थिति के जो मैं कल्पना कर रहा था। तो इसे सीधे संबोधित करने और अंतर्दृष्टि और सहायक बिंदुओं के साथ आपके उत्तर के लिए +1।
whuber

4

ArcGIS मदद का कहना है:

वाटरशेड को प्रवाह दिशा की गणना करके और वाटरशेड टूल में इसका उपयोग करके एक डीईएम से हटा दिया जा सकता है। योगदान क्षेत्र का निर्धारण करने के लिए, प्रवाह की दिशा का प्रतिनिधित्व करने वाले एक रेखापुंज को पहले फ्लो डायरेक्शन टूल के साथ बनाया जाना चाहिए।

फ्लो डायरेक्शन की गणना डीईएम से डी 8 विधि का उपयोग करके की जाती है , जहां प्रत्येक सेल के लिए गणना करके प्रवाह को रोक दिया जाता है, जिसमें से 8 पड़ोसी हैं, इस सेल से पानी बहेगा।

D8 के कई विकल्प हैं, जैसे Rho8, Froh8 और Stream Tube, लेकिन ArcGIS सहित अधिकांश GIS सॉफ़्टवेयर D8 का उपयोग करते हैं, क्योंकि यह सरल है, और दूसरों की तुलना में कम कम्प्यूटेशनल रूप से गहन है।


कुछ साल पहले, मैं वाटरशेड डेलिनेशन प्रोजेक्ट पर काम कर रहा था, और हम डी 8 पद्धति का उपयोग करके आर्कगिस के कारण कई मुद्दों का सामना कर रहे थे। दो मुख्य समस्याएं थीं

  • D8 केवल Uni दिशात्मक प्रवाह की अनुमति देता है। एक सेल से केवल एक दिशा में पानी निकल सकता है।
  • उत्पन्न प्रवाह प्रवाह में विकर्ण अक्ष के साथ एक बड़ा पूर्वाग्रह था। इसने अजीब दिखने वाली धाराओं को जन्म दिया।

हमारे डेटा से, हम जानते थे कि ये दो मुद्दे बड़ी समस्याएं थीं, इसलिए मैंने हाइब्रिड विधियों का उपयोग करके प्रवाह दिशाओं को उत्पन्न करने के लिए कुछ उपकरण विकसित किए थे।

मेरे शुरुआती कार्यों में से एक था, कैचमेंट गणना उपकरण को उलट देना। मैंने पाया कि यह तार्किक रूप से काफी सरल था। यदि आप दिए गए बिंदु के लिए कैचमेंट ढूंढना चाहते हैं (जिसे पाइ पॉइंट भी कहा जाता है), तो आप सबसे पहले उस सेल को खोजते हैं जिसमें यह है। अक्सर आप इसे किसी सहिष्णुता में उच्चतम प्रवाह संचय के साथ बिंदु पर स्नैप करने की कोशिश करेंगे।

इस सेल के लिए आपको पड़ोस की सभी कोशिकाएँ मिलेंगी जो इसमें योगदान देती हैं। इन पड़ोस कोशिकाओं में से प्रत्येक के लिए, आप उन कोशिकाओं को ढूंढते हैं जो उनके लिए योगदान करते हैं और इसी तरह। आप इस पुनरावृत्ति प्रक्रिया को तब तक जारी रखते हैं जब तक आपको कोई नई कोशिका नहीं मिल जाती। कि जब आप रिज लाइनों या वाटरशेड सीमा तक पहुँच चुके हैं।

मैंने पाया कि मेरे साधारण कोड ने एएससीआईआई के आपदाओं के लिए ऐसा किया था, आर्कजीआईएस के वाटरशेड टूल की तुलना में लगभग समान आउटपुट दिया। कभी-कभी सीमा पर कुछ कोशिकाओं का अंतर हुआ करता था, इसलिए मुझे यकीन है कि आर्कजीआईएस एक अनअमोडिफाइड ए 8 एल्गोरिथ्म का अनुसरण करता है।


विस्तार के लिए धन्यवाद। लेकिन वाटरशेड खोजने के लिए डी 8 दिशाओं का उपयोग करने के लिए एल्गोरिदम क्या है ? कृपया dmahr के उत्तर के बाद टिप्पणियों को देखें ।
whuber

नमस्ते, धन्यवाद, लेकिन यह वास्तव में इस सवाल का जवाब नहीं है। आप इस वाक्य के साथ इसे मारते हैं "इस सेल के लिए आपको पड़ोस में सभी कोशिकाएं मिलेंगी जो इसमें योगदान देती हैं। इन पड़ोस की प्रत्येक कोशिकाओं के लिए, आप उन कोशिकाओं को ढूंढते हैं जो उनके लिए योगदान करते हैं और इसी तरह"। उस खोज को लागू करने के लिए कई अलग-अलग एल्गोरिदम हैं। सवाल यह है कि एक कौन है
जेम्स

4

यह पहले पूछा गया है , हालांकि शायद थोड़ा अलग संदर्भ में। स्थानिक विश्लेषक के हाइड्रोलॉजिकल टूलसेट में जियोप्रोसेसिंग टूल के सभी डी 8 फ्लो डायरेक्शन मॉडल का उपयोग करते हैं , जैसा कि हॉव फ्लो डायरेक्शन वर्क्स पेज में कहा गया है :

आठ आसन्न कोशिकाओं से संबंधित आठ वैध आउटपुट दिशाएँ हैं जिनमें प्रवाह यात्रा कर सकता है। इस दृष्टिकोण को आमतौर पर आठ-दिशा (डी 8) प्रवाह मॉडल के रूप में संदर्भित किया जाता है और जेनसन और डोमिंगु (1988) में प्रस्तुत दृष्टिकोण का अनुसरण करता है।

जेनसन और डोमिंग्यू (1988) पेपर की एक प्रति यहां उपलब्ध है

इनपुट के रूप में फ्लो डायरेक्शन रस्टर्स का उपयोग करने वाले सभी उपकरण एसोसिएशन द्वारा इस फ्लो डायरेक्शन मॉडल का उपयोग करते हैं। इसमें वाटरशेड, फ्लो अक्युमुलेशन, फ्लो लेंथ, फिल आदि शामिल हैं।


तो मुझे लगता है कि प्रश्न पर एक अनुवर्ती होगा, उस एल्गोरिथ्म को कैचमेंट वापस करने के लिए कैसे संशोधित किया गया है?
जेम्स

वाटरशेड टूल, पोस पॉइंट्स से फ्लो डायरेक्शन रैस्टर को नेविगेट करता है। यह फ्लो संचय उपकरण का उल्टा है, सिवाय इसके कि आउटपुट रेस्टर के बजाय कोशिकाओं की संख्या का वर्णन करते हुए, यह डालना बिंदु की आईडी की रिपोर्ट करता है।
dmahr

1
ठीक है, मुझे लगता है कि मुझे थोड़ा और विशिष्ट होने की आवश्यकता है। मुझे पता है कि यह क्या करता है। मुझे नहीं पता कि एल्गोरिथ्म क्या लागू किया गया है। यानी मुझे लगता है कि यह किसी प्रकार का खोज एल्गोरिथ्म है, लेकिन यह अभी भी हो सकता है; चौड़ाई-प्रथम, गहराई-प्रथम, पुनरावृत्ति-गहनता-प्रथम गहराई ... आदि
जेम्स

1
धन्यवाद dmahr @ शुभंकर: जहां तक ​​मुझे पता है, अलग-अलग खोज एल्गोरिदम थोड़ा अलग परिणाम दे सकते हैं? और हां, जेनेरिक अल्गोरिथम ढूंढना कोई समस्या नहीं है, लेकिन यह सीखना कि ईएसआरआई वाटरशेड-विशिष्ट क्षेत्रों (जैसे डीटीएम के फ्लैट भागों) को कैसे उपयोगी बनाता है।
जेम्स

1
जेम्स कृपया उस अंतिम बिंदु को स्पष्ट करने के लिए अपने प्रश्न को संपादित करें, ताकि यह धागा इकट्ठा होना बंद हो जाए अन्यथा बेकार "यह डी 8" उत्तर है। (क्या है D8 टिप्पणियों के बारे में उपयोगी है, तो वहाँ एक है अगर आपको लगता है कि D8 एक अनूठा प्रवाह की दिशा ग्राफ पर ले जाया जाता है स्वीकार करते हैं कि अद्वितीय वाटरशेड चित्रण समस्या का सही समाधान है, क्योंकि वाटरशेड ग्राफ खुद की संपत्ति हैं। देखते हैं इस प्रकार अगर किसी भी अस्पष्टता में उन्हें (a) "वाटरशेड," (b) की परिभाषा कैसे
निर्धारित करनी चाहिए

0

इस प्रश्न पर अधिक विचार करने के लिए, मैंने चाप में एक वाटरशेड विश्लेषण चलाया: मैंने एक (भरा हुआ) डेम लिया, प्रवाह दिशा की गणना की और कुछ बिंदुओं को रखा, जो पहले से गणना किए गए स्ट्रीम नेटवर्क पर स्थानों के अनुरूप थे। मैंने 'वाटरशेड' टूल चलाया और इसने मुझे कुछ अच्छे बेसिन दिए, शेष क्षेत्र के अधिकांश हिस्से को 'अपस्ट्रीम' के रूप में कवर किया (जैसा कि आप उम्मीद करेंगे):

वाटरशेड छवि

फिर मैंने पायथन में एक त्वरित खोज एल्गोरिदम को कोडित किया (जैसे ऊपर दिए गए उत्तर), जो प्रवाह दिशा ग्रिड का निरीक्षण करता है और प्रवाह पथों का 'अनुसरण' करता है। प्रत्येक नोड के लिए, मैं 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 सेल लौटाता है।

किसी को पता है कि मैं क्या गलत कर रहा हूं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.