लैट / लॉन्ग में कई लेयर्स के बाउंडिंग बॉक्स की गणना कैसे करें?


11

मैं सभी प्रकार की मानचित्र सेवाओं के परीक्षण के लिए एक आवेदन लिख रहा हूं, मुख्य रूप से एजीएस 9.x, एजीएस 10 और डब्ल्यूएमएस 1.x।

एप्लिकेशन के भाग में सेवा के पूर्ण सीमा के भीतर, व्यक्तिगत अनुरोधों के लिए यादृच्छिक बाउंडिंग बॉक्स बनाना शामिल है। यह भाग भौगोलिक और प्रक्षेपित समन्वय प्रणालियों के लिए ठीक काम कर रहा है जब सेवा की पूर्ण सीमा ज्ञात है (जैसे AGS सेवा की पूर्ण संपत्ति के माध्यम से)।

मेरी समस्या WMS के साथ है: GetCapabilities प्रतिक्रिया में प्रत्येक परत> = 1 CRS में इसके सीमा क्षेत्र को परिभाषित कर सकती है। एप्लिकेशन के कुछ हिस्सों को यह जानने की जरूरत है कि क्या किसी सेवा का सीआरएस भौगोलिक या अनुमानित है, इसलिए डब्ल्यूएमएस में अस्पष्टता को दूर करने के लिए मैं हमेशा लेट लोनबाउंडिंगबॉक्स का उपयोग कर रहा हूं जिसे हमेशा परिभाषित किया जाता है और ईपीएसजी: 4326 में। फिर मुझे सभी परतों के आधार पर एक पूर्ण सेवा बाउंडिंग बॉक्स की गणना करनी होगी जो एक व्यक्तिगत अनुरोध में जाते हैं (जो कि यादृच्छिक होते हैं)। यहीं पर वो मुश्किल हो जाता है।

मैं खो रहा हूं क्योंकि प्रत्येक लाट / लोन बाउंडिंग बॉक्स के लिए LLx (निचले बाएं देशांतर) URx (ऊपरी दाएं देशांतर) से बड़ा या छोटा संख्या हो सकता है, जिसके आधार पर यह मेरिडियन होता है। हर बार जब मैं चौकोर या गोलाकार आरेख बनाना शुरू करता हूं, तो मुझे लगता है कि मेरे पास एक दृष्टिकोण है, और फिर एक ऐसा मामला ढूंढता हूं जो इसे बर्बाद कर देता है और मेरा मस्तिष्क मांस में बदल जाता है।

जब तक यह काम नहीं करता, तब तक मैं इस पर जोर देता रहूंगा, और अगर मुझे यहां कोई समाधान पोस्ट मिलता है, लेकिन मुझे यकीन है कि एक स्वीकृत और पूरी तरह से परीक्षण किया गया दृष्टिकोण है जो मेरे जीवन को आसान बना देगा। मैं अभी इसे ढूंढ नहीं सकता।


इस लेख में ठीक है: stonybrook.edu/libmap/coordinates/seriesa/no2/a2.htm (ग्लोबल गोचर सेक्शन) मैं "दुर्भाग्य से, कोई सरल और सुरुचिपूर्ण समाधान नहीं है, जो वैश्विक समाधानों को हल करने के लिए मौजूद है"। मैं सभी परत विस्तार पर स्कैन करने के बारे में सोच रहा हूं और अगर URx <LLx केवल -180 +180 की सीमा तय करता है। एक ही लेख बताता है कि अधिकांश जीआईएस एक बहुभुज को इन निर्देशांक के साथ दो अलग-अलग विशेषताओं में विभाजित करेगा।
2:10 बजे टमाटर

सर्च इंजन के लिए कुछ और कीवर्ड्स के रूप में मुझे सिर्फ इस उत्कृष्ट पोस्ट को फिर से ढूंढने में परेशानी हुई: न्यूनतम बाउंडिंग बॉक्स, कई बाउंडिंग बॉक्स, अंतर्राष्ट्रीय डेट लाइन, डिसकंटीनिटी, न्यूनतम सर्कल सेगमेंट
letmaik

जवाबों:


6

संदर्भित लेख विचारशील है। हालांकि, मेरा मानना ​​है कि एक "सरल और सुरुचिपूर्ण" समाधान है: भौगोलिक डेटासेट के लिए, दो प्रकार के बाउंडिंग बॉक्स हैं। जो + -180 मेरिडियन को स्ट्रैड नहीं करते हैं उन्हें हमेशा की तरह संग्रहीत और खोजा जा सकता है। जो + -180 मेरिडियन स्ट्रैडल करते हैं, उन्हें एक अर्ध-पूरक रूप में संग्रहीत किया जा सकता है : अर्थात्, अक्षांशों की श्रेणी को हमेशा की तरह संग्रहीत करें, लेकिन इसके बजाय बॉक्स के भीतर शामिल नहीं किए गए अनुदैर्ध्य की सीमा को संग्रहीत करें (और यह इंगित करने के लिए थोड़ा टॉगल करें कि कौन सा रूप है भंडारण का उपयोग किया जा रहा है)। भौगोलिक रूप से अनुक्रमणिका या खोज ट्री संरचनाओं के लिए अनिवार्य रूप से किसी संशोधन की आवश्यकता नहीं है; खोज एल्गोरिदम के लिए केवल एक मामूली संशोधन की आवश्यकता है।

किसी भी दर पर, यहां प्रश्न का समाधान स्वयं है।


मुझे लगता है कि आप इनपुट डिस्क्रिप्शन बॉक्स डिस्क्रिप्टर ((LLx, LLy), (URx, URy) के एक अनुक्रम होने का अनुमान लगाते हैं, जहां:

  • -540 <= LLx, -180 <= URx, LLx <= 180, और URx <= 180. इसके अलावा -90 <= LLy <= URy <= 90।

  • एक बिंदु पर (देशांतर, अक्षांश) = (x, y) को बी बी के भीतर और यदि केवल तभी झूठ माना जाता है

    1. LLy <= y <= URy और

    2. या तो LLx <= x <= URx या LLx - 360 <= x <= URx।

आउटपुट के लिए आप सभी निविष्टियों के मिलन वाले सबसे छोटे बाउंडिंग बॉक्स के लिए पैरामीटर चाहेंगे।

स्पष्ट रूप से न्यूनतम बाउंडिंग बॉक्स (MBR) की y- सीमा न्यूनतम और अधिकतम y- मान होगी। एक्स-सीमा के लिए, सबसे बड़ा अंतर खोजने के लिए एक लाइन स्वीप का उपयोग करें ।

यहाँ एल्गोरिथ्म का वर्णन है। इसे समझाने के लिए, मान लीजिए इनपुट में चार बॉक्स हैं,

((-81,-16),(-77,80)),
((77,-19),(156,5)),
((-149,-45),(-90,81)),
((-69,-85),(-36,-76))

यहाँ बक्से का एक आरेख (लाल रंग में) और पहले का MBR (काला) में है, फिर पहले दो, फिर पहले तीन, फिर सभी बक्से हैं।

यहां छवि विवरण दर्ज करें

ध्यान दें कि दूसरे चरण में, पूर्वी और पश्चिमी गोलार्ध में बक्से एक एमबीआर से घिरे हैं जो + -180 डिग्री मेरिडियन को पार करता है, जिससे यह इस नक्शे पर दो अलग-अलग बक्से के रूप में दिखाई देता है। अंतिम चरण में, दक्षिण अमेरिका और अंटार्कटिका के बीच एक छोटे से बॉक्स को समायोजित करने के लिए एमबीआर का विस्तार पूर्व की ओर किया जाना है।

  1. बक्से के सभी एक्स-निर्देशांक निकालें, उन्हें modulo 360 की गणना करें (उन्हें रेंज -180..180 में रखने के लिए), उन्हें आरोही क्रमबद्ध करें, और उन्हें लपेटने के लिए पहले मूल्य (360 डिग्री द्वारा बढ़ाया) को अंत तक जोड़ें। चारों ओर:

    -149, -90, -81, -77, -69, -36, 77, 156, 211
    

    (ध्यान दें कि 211 और -149 एक ही मेरिडियन हैं।)

  2. पूर्ववर्ती समन्वय के बीच के अंतराल का प्रतिनिधित्व करते हुए प्रत्येक x- समन्वय के बारे में सोचें (लेकिन उस पूर्ववर्ती मूल्य को शामिल नहीं) और यह। जैसे, -77, -81 से -77 तक सभी मानों का प्रतिनिधित्व करता है, लेकिन -81 को शामिल नहीं करता है। इनमें से प्रत्येक के लिए पहले के बाद, उन अंतरालों की संख्या गिनें, जिनमें वह अंतराल हो।

    1, 0, 1, 0, 1, 0, 1, 0
    

    उदाहरण के लिए, पहले "1" का अर्थ है कि एक बॉक्स अंतराल -149 से -90 तक कवर करता है। (यह तीसरा बॉक्स है।)

    अनुकूलन के रूप में, आप किसी भी बॉक्स को x- अंतराल को कवर करते हुए पाते ही गिनती को रोक सकते हैं और अगले x- अंतराल पर आगे बढ़ सकते हैं। हम केवल यह निर्धारित करने की कोशिश कर रहे हैं कि कौन सा अंतराल किसी बक्से द्वारा कवर नहीं किया जा सकता है।

  3. (1) में क्रमबद्ध एक्स-निर्देशांक के पहले अंतर की गणना करें।

     59, 9, 4, 8, 33, 113, 79, 55
    

    कवरेज के साथ इनका मिलान करें (2)। सबसे बड़ा अंतर ज्ञात करें जिसके लिए कवरेज की संख्या 0. है। यहाँ, यह 113पूर्ववर्ती सरणी के छठे तत्व के बराबर है । बक्सों के संग्रह द्वारा छोड़े गए देशांतर में यह सबसे बड़ा अंतर है।

    (दिलचस्प बात यह है कि अधिकतम एक स्थान पर होने की संभावना से पता चलता है कि समाधान आवश्यक रूप से अद्वितीय नहीं है! बक्से के एक सेट के लिए एक से अधिक एमबीआर हो सकता है। आप अतिरिक्त शर्तों को जोड़कर एक अद्वितीय को परिभाषित कर सकते हैं, जैसे कि आवश्यकता होती है। MBR + -180 मेरिडियन के भीतर औसत दूरी जितना संभव हो उतना बड़ा होना चाहिए; एक टाई को हल करने के लिए, (सबसे अच्छा समाधान) चुनें।

  4. इसी अंतराल को खोजें: यहाँ, यह -36 से 77 के बीच है। यह एमबीआर में नहीं देशांतरों की सीमा है । इसलिए, इसके पूरक को -180 से 180 के बीच की सीमा में लें। यहां, पूरक दो भिन्न अंतराल है, -180 से -36 तक और दूसरा 77 से 180 के माध्यम से। वैकल्पिक रूप से, एकल आयत के रूप में पूरक का प्रतिनिधित्व करते हैं + -180 डिग्री मेरिडियन: -283 से -36 यहां (या, समकक्ष, 77 से 324 के माध्यम से)।

  5. MBR के कोनों के लिए y-मानों के न्यूनतम और अधिकतम का उपयोग करें।

    ((-283, -85), (-36, 81))
    

बिंदु 4 के अंतिम वाक्य में, "-283 थ्रू -36" क्यों लिखते हैं। 77 -36 क्यों नहीं?
21

1
@neo क्योंकि "77 से -36" एक खाली अंतराल है। (परिभाषा के अनुसार, एक अंतराल [a, b] में सभी संख्याएँ x होती हैं जैसे कि एक <= x <= b। A = 77 और b = -36 के साथ, ऐसी कोई संख्या नहीं होती है।) "अच्छी तरह से कहकर कोई भी प्रतिक्रिया कर सकता है।" , जहां तक ​​देशांतर जाता है, 77 से -36 पूरी तरह से स्पष्ट है। " समस्या यह है कि यह नहीं है: यह 77 से 180 = -180 तक जाएगा और -36 तक जारी रहेगा या यह 77 -36 से नीचे जाएगा ? इस तरह की अस्पष्टताओं से बचने के लिए मैंने सावधान रहना चुना।
whuber

मैंने आपके उत्तर का त्वरित कार्यान्वयन किया (देखें जिस्ट )। यह जाँचने के लिए कि क्या किसी बॉक्स में एक अंतराल है, मुझे हालांकि बॉक्स लॉन्गिट्यूड को खोलना था, अन्यथा यह डिसकंटिनिटी को पार करने वाले बॉक्स के लिए काम नहीं करता। एक नौसिखिया होने के नाते यह मेरे लिए पूरी तरह से स्पष्ट नहीं था :)
लेटमिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.