आर्कगिस के लिए नया और दो बिंदुओं के बीच दूरी की गणना करना चाहते हैं "मछली तैरती है"


9

हमारे पास हाइड्रोग्राफी नाम की एक परत है जो किसी दिए गए असाइनमेंट के लिए पानी का क्षेत्र है। मेरे पास एक स्टेशन बिंदु और एक लक्ष्य बिंदु है। मुझे उन दो बिंदुओं के बीच की दूरी की जरूरत है लेकिन हाइड्रोग्राफी के अंदर। (नावें जमीन पर नहीं जा सकतीं)

डिफेंस सर्विस दूरी की गणना निष्क्रिय लगती है, लेकिन यह एक सीधी रेखा में होती है क्योंकि यह किसी भी रेखापुंज को इनपुट के रूप में नहीं लेती है। यूक्लिडियन लगभग वहाँ लगता है, लेकिन मुझे कुछ भी नहीं मिला जो सीधे आगे है।

मैं सर्वर 10.1 SP1 एंटरप्राइज़ के लिए ArcGIS एक्सप्लोरर 2500, ArcGIS का उपयोग कर रहा हूं, और हम C # में अपनी सेवाएं और उपकरण लिख रहे हैं।

मेरे पास हाइड्रोग्राफी, आईपी पॉइंट्स के निर्माण का लोड है, लेकिन आगे क्या करना है!

किसी भी मदद की सराहना की, कृपया।


1
वहाँ 'नहीं स्वीकार किए जाते हैं जवाब' यहाँ है, लेकिन मुझे लगता है कि यह एक बहुत ही इसी तरह के सवाल यह है: gis.stackexchange.com/questions/33799/...
Mapperz

मेरे उत्साह का स्तर तुरंत ऊपर जाना शुरू हो गया जब तक उन्होंने कहा कि वह एक प्रोग्रामर नहीं था। यह उपकरण का उपयोग करके नहीं किया जा सकता है। मेरे पास एक चयनित स्थान और लक्ष्यों की सूची के साथ एक कस्टम टूल विंडो है। मुझे सर्वर पर एक विधि को कॉल करने और प्रत्येक लक्ष्य के लिए दूरी के साथ सूची को भरने की आवश्यकता है।
SASS_Shooter

क्या आपकी हाइड्रोग्राफी परत की रेखाएं या बहुभुज हैं?
कॉनर

यह बहुभुज है जिसे हम एक रेखापुंज में बदलते हैं।
SASS_Shooter

आपका उपयोग-मामला थोड़ा भ्रमित करने वाला है। क्या आप एक झील के किनारे दो बिंदुओं से सबसे छोटी दूरी खोजने की कोशिश कर रहे हैं? या क्या आपके स्टेशन नदी स्टेशन (जो झील के तल पर हैं) के अनुरूप हैं?
DPierce

जवाबों:


4

स्थानिक विश्लेषक एक्सटेंशन से लागत दूरी और लागत पथ उपकरण का उपयोग करें ।

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


हां - मैंने पाया कि कॉस्ट डिस्टेंस इनपुट के रूप में एक रेखापुंज लेता है और प्रारंभ और समापन के लिए हाइड्रोग्राफी रेखापुंज पर मेरे बिंदु। लौटाया गया मूल्य एक पॉलीलाइन है जिससे मैं लंबाई प्राप्त कर सकता हूं।
SASS_Shooter

1

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


टीआईएन = त्रिकोणीय अनियमित नेटवर्क, बिंदुओं की एक जाली और ऐसी लाइनें जो प्रत्येक बिंदु अपने निकटतम पड़ोसियों से जुड़ी होती हैं और कोई रेखाएं प्रतिच्छेद नहीं करती हैं। इसके लिए http://en.wikipedia.org/wiki/Delaunay_triangulation देखें । मैंने ESRI TIN ऑब्जेक्ट्स का उपयोग नहीं किया, इसके बजाय मैंने ट्राइंगुलेशन के लिए कुछ कोड पाया और उन्हें मेमोरी में रखा, जैसे कुछ http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation

सबसे छोटी पथ एल्गोरिथ्म के लिए देखें http://en.wikipedia.org/wiki/Dijkstra 's_algorithm इसमें एक अच्छी तस्वीर है; जटिल नाम के बावजूद यह वास्तव में काफी सरल है।

उन रेखाओं को बनाने से, जो मैंने डिलायने त्रिकोणाकार किया था, तब त्रिकोण के प्रत्येक किनारे का मध्य बिंदु पाया गया (मूल ज्यामिति ... औसत X, औसत Y) और फिर बहुभुज के भीतर गिरे बिंदुओं को जाली में डाला, जो एक जाल देता है केंद्र पथ और सीमा पर सभी कोने के लिंक। फिर जलक्षेत्र के किनारों का अनुसरण करने वाले पहलुओं को छोड़कर दिक्जस्ट्रा के एल्गोरिथ्म का उपयोग करते हुए नेटवर्क का पता लगाते हैं और आपको अंततः बिंदु A से बिंदु B तक जलमार्गों के केंद्र के नीचे चलने वाला मार्ग मिलेगा। बहुत सारे संभावित रास्ते होंगे इसलिए मैंने प्रत्येक एपेक्स पर एक वजन रखा और एक रास्ता बंद कर दिया जब संचयी लंबाई पहले से दर्ज की गई लंबाई से अधिक हो गई, और यदि यह कम था तो छोटी संचयी लंबाई के साथ एपेक्स को अपडेट करें - इससे राशि कम हो जाती है पथ जो पता लगाया गया है, और वहाँ बहुत कुछ हो सकता है;

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


माइकल - मैं C # डेवलपर हूं। ArcGIS और उनके प्रोग्रामिंग टूल के लिए बहुत नया है। मुझे मिलिट्री एनालिस्ट का उपयोग करके एक आउट ऑफ बॉक्स सॉल्यूशन मिला था, लेकिन ईएसआरआई अपने सभी ज्ञान में इसे छोड़ रहा है। टीआईएन के बिंदुओं से आपका क्या तात्पर्य है और आपने कौन सा डायजकस्ट्रा एल्गोरिथम उपयोग किया है?
SASS_Shooter

1

मैं इसे भविष्य में किसी के लिए जोड़ रहा हूं जो इस धागे को पढ़ता है।

यहाँ वह सब है जो मैंने इस मुद्दे को खोदने और पॉइंट्स कॉल के बीच पूर्ण दूरी प्राप्त करने में सीखा है।

हमारा पहला मुद्दा RasterCatalog की स्थिर प्रकृति से उपजा है। यह है कि रेखापुंज बदलने पर रेखापुंज के अंदर रेखापुंज को नहीं बदलता है। यह पता चला कि हमारे पास एक प्राचीन संस्करण था जो एक समुद्र तट के नक्शे के पास कहीं नहीं था। पाठ सीखा: RasterCatalog EVERY समय का पुनर्निर्माण करें आप उस पर आधारित आपदाओं को बदलते हैं।

जोड़ा के साथ दूरी रेखापुंज वजन के साथ काम करने के लिए एक बोझिल बात हो जाती है। निम्नलिखित परिदृश्य को देखें: रेखापुंज का मूल मूल्य 1 कुल दूरी है जिसे मैं देखना चाहता हूं 117 किमी। सेल का आकार 1 मीटर है। यदि रेखापुंज अब 48 का भारित मान है, तो मैं कुल दूरी 117 किमी * 48 देखना चाहता हूँ !!! तो कॉस्टडिस्टेंस विधि में दूरी सेल दूरी नहीं है, लेकिन भारित दूरी, जाहिरा तौर पर प्रत्येक सेल में मूल्य जोड़कर प्रत्येक सेल का योग = कुल दूरी के लिए पारित मूल्य। भले ही सेल का आकार 1 मीटर हो !!!

दूरी रेखापुंज मूल के सभी बिंदु पर केंद्रित है। इसलिए जब आप कॉस्टडिनेंस रूटीन कहते हैं तो आप उस सूची में मूल बिंदु को शामिल नहीं करना चाहते हैं। अगर आप करते हैं तो आपको 0. की दूरी के साथ एक अंक मिलेगा (यह ईएसआरआई समर्थन भी है)

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

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

उलझन में? चिंता मत करो, यह ESRI है।

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