निर्देशांक के एक सेट को देखते हुए, मैं न्यूनतम सीमा की गणना कैसे कर सकता हूं?


13

मेरे पास लोन / लेट में निर्देशांक का एक सेट है। हमेशा कम से कम 3 आदेश दिए गए निर्देशांक होते हैं जो एक पाली बनाते हैं (यदि उन्हें फ्लैट अनुमानित किया गया था)। मैं इन निर्देशांक के लिए न्यूनतम सीमा की गणना वैध देशांतर और अक्षांश श्रेणियों के सेट के रूप में कैसे कर सकता हूं? ('मान्य' से मेरा तात्पर्य है कि एंटीमैरिडियन के लिए स्पष्ट रूप से हिसाब)। यह बताने के लिए कि मैं क्या कर रहा हूं, इसकी एक कठिन तस्वीर है।

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

तस्वीर में मामला तुच्छ है; आप बस सभी बिंदुओं के लिए पूर्ण न्यूनतम और अधिकतम पाते हैं। हालांकि यह सभी मामलों के लिए काम नहीं करता है। क्या कोई सामान्य समाधान है?

संपादित करें: 'वैध' से मेरा क्या मतलब है, यह स्पष्ट करने के लिए, मेरे डेटा सेट में मेरे पास तीन देशांतर मान हैं: -76, -135 और 164. मान एंटीमैरिडियन को पार करते हैं और मैं परिणामी सीमाओं को विभाजित करना चाहता हूं: -76 -180 और 164 से 180।

कुछ और स्पष्टीकरण। अंक एक बहुभुज बनाते हैं, इसलिए कुछ मामलों में, आवश्यक सीमा -180 से +180 तक हो सकती है (यानी, पूर्ण 360 डिग्री):

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

बाईं ओर की छवि पृथ्वी के एक 'आधे' पर होने वाले चार निर्देशांक के देशांतर को दिखाती है। इसकी कल्पना करें जैसे आप उत्तरी ध्रुव (ब्लैक डॉट) पर देख रहे थे। गुलाबी न्यूनतम अनुदैर्ध्य सीमा को दर्शाता है जो बहुभुज को सम्मिलित करता है (बहुभुज बैंगनी में चार बिंदुओं के बीच दिखाया गया है)। बाईं ओर के मामले में दो अनुदैर्ध्य पर्वतमाला होंगी: [-180 से -120] और [135 से 180] (बस नेत्रहीन इसका आकलन करें)

दाईं ओर की छवि एक अन्य मामले को दिखाती है जहां बिंदु पृथ्वी के चारों ओर जाते हैं। यह सीमा [-180 से 180] होगी।


1
मैंने इस समस्या पर पहले कभी विचार नहीं किया, इसका एक बड़ा सवाल है। फिर भी एक और उदाहरण जहाँ एक सपाट धरती हमारे कामों को आसान बना देगी! मैं इसके कुछ समाधान देखने के लिए उत्सुक हूं।
sgrieve करें

मुझे लगता है कि आपको "अधिक मान्य" ('मान्य' से मेरा मतलब है कि एंटीमैरिडियन के लिए स्पष्ट रूप से खाता है) "- मैं इस प्रश्न में सीमा के सामने जाने के लिए न्यूनतम आवश्यकताओं का अनुमान लगा रहा हूं।
इयान Turton

क्या आप अपनी छवि को फिर से जोड़ सकते हैं जो आपकी समस्या को समझाने में मदद कर सकता है।
Mapperz

1
iant: स्पष्ट रूप से 'मान्य' मैपरेज़: पुनः जोड़ें? क्या यह दिखाई नहीं दे रहा है? मैं इसे ठीक देख सकता हूं।
प्रिस

1
अच्छी तरह से निर्देशांक लोन / लेट में हैं, और भौगोलिक डेटा को पुनः प्राप्त करने के लिए एक डेटाबेस को क्वेरी करने के लिए उपयोग किया जाता है। कड़ाई से बोलते हुए आप इसे एक शुद्ध गणित समस्या में बदल सकते हैं (हालांकि कहा जा सकता है कि जीआईएस में कई चीजों के बारे में)
प्रिस

जवाबों:


5

आशा है कि मैं इस प्रश्न को सही ढंग से समझता हूँ ...

हम देशांतर और अक्षांश के लिए समस्या को अलग से हल कर सकते हैं, इसलिए मैं आपके उदाहरण को अनुदैर्ध्य के साथ ले जाऊंगा: -76, -135 और 164।

पहले मैं उन्हें आदेश दूंगा:

-135, -76, 164

फिर मैं बाईं ओर सबसे अधिक समन्वय को दाईं ओर जोड़ूंगा: -135 + 360 = 225

-135, -76, 164, 225

अब हम निर्देशांक के बीच अंतराल की गणना कर सकते हैं:

-135 (59) -76 (240) 164 (61) 225
             .......

सबसे बड़ा अंतर (240) न्यूनतम बाउंडिंग बॉक्स की सीमा होना चाहिए, जो हिस्सा बॉक्स से संबंधित नहीं है । बिंदीदार रेखा उस सर्कल का सबसे बड़ा हिस्सा है जिसे हम बाहर निकाल सकते हैं। हमारे उदाहरण में इसका मतलब है, सीमा बॉक्स 164 से शुरू होता है, इसमें -135 शामिल है और -76 के साथ समाप्त होता है।


मुझे लगता है कि ज्यादातर मामलों के लिए यह काम करता है। लेकिन अतिरिक्त देशांतर (+60) [पाली में चौथे बिंदु के रूप में] के साथ मेरे उदाहरण पर विचार करें। इस मामले में मैं -180 से 180 चाहता हूं। आपके तरीके का उपयोग करते हुए, मुझे 61 से 180 और -76 से -180 मिलेगा।
प्रिस

@ क्रिस - तो आप देशांतर 180 / -180 (यह सब के बाद एक ही बिंदु) चाहते हैं, हर मामले में बॉक्स का हिस्सा होने के लिए, भले ही वह सबसे छोटा संभव बॉक्स न हो?
मार्टिंकॉक्ली

मुझे लगता है कि यहां महत्वपूर्ण अंतर यह है कि अंक एक बहुभुज बनाते हैं। मेरा संपादन देखें।
प्रिस

@ क्रिस - ओह ठीक है, यह वास्तव में मुश्किल लग रहा है। यह दो बिंदुओं के बीच एक किनारे के हर बिंदु की तरह है, जिसे शीर्ष बिंदु भी कहा जाता है।
मार्टिस्टोक्ली

1

Google मानचित्र एपीआई के साथ जावास्क्रिप्ट में ऐसा करना वास्तव में आसान है। यहां बताया गया है कि आप उस API के साथ क्लाइंट-साइड कैसे करेंगे:

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

अरे, उत्तर के लिए धन्यवाद, हालांकि मैं एक एपीआई कॉल करने या preexisting समाधान का उपयोग करने के बजाय वास्तविक विधि की तलाश कर रहा हूं।
प्रिस

आपने मुझे सीमा। विधि प्रदान की, मैं इस सटीक समाधान की तलाश में था, इसलिए धन्यवाद!
थॉमसन कॉमरेड

क्या यह बहुभुज के साथ काम करता है? मैं आपको आयत का उपयोग करते हुए देखता हूँ।
डैनी जी

1

मुझे लगता है कि मुझे ऐसा करने का एक तरीका मिल गया होगा। मेरा प्रारंभिक कार्यान्वयन काम करता है, लेकिन मुझे यकीन नहीं है कि अगर कोई किनारे मामले हैं जो मैंने याद किए हैं। यदि इस समाधान में कुछ गड़बड़ है, तो कृपया इसे इंगित करें।

यह देखते हुए कि मैं बहुभुज के लिए लोन / लाट पर्वतमाला प्राप्त करने से संबंधित हूं, जिसमें केवल वे बिंदु शामिल हैं जो समस्या को हल करने का एक तरीका वास्तव में शुरू से अंत तक निर्देशांक के सेट के साथ-साथ 'चलना' है। आप इस बात का ध्यान रखते हैं कि आपने पृथ्वी के केंद्र के सापेक्ष कितनी दक्षिणावर्त और वामावर्त यात्रा की है, एक प्रारंभिक बिंदु दिया है और जब तक आप बहुभुज को पूरा नहीं करते तब तक चलते रहें:

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

आप अपने शुरुआती बिंदु से कितनी दूर सीडब्ल्यू और सीसीडब्ल्यू की यात्रा कर सकते हैं ... इससे आपको सामान्य मामले में सही सीमा (छवि में छोड़ दिया) प्राप्त करने के लिए पर्याप्त जानकारी मिलती है। मामले में जहां बहुभुज पूरी तरह से घूमता है या केंद्र में कटौती करता है, यात्रा का लौटा हुआ कोण 360 डिग्री होगा।

यह विधि तब भी काम करती है जब आपके पास बहुभुज 'हगिंग' पृथ्वी की सतह को काटने के बजाय होता है। इसलिए यदि आपके पास एक बहुभुज है जो किसी को टोरंटो (लोन: -79) से लंदन (लोन: -5) से टोक्यो (लोन: 139) तक पृथ्वी की सतह पर यात्रा करते हुए दिखा रहा है (वापस उसी क्रम में), तो आप सीमा प्राप्त करें [-79 से 139]।

यदि बहुभुज केंद्र में कटौती (+90 और -90 पर दो आसन्न बिंदुओं की कल्पना करता है), मैं इसे पूर्ण स्वीप (360 डिग्री) मानता हूं, हालांकि आप किसी भी तरह से जा सकते हैं।

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