एंटीमैरिडियन में फैले भौगोलिक डेटा के साथ डेटाबेस और एपीआई के लिए सर्वोत्तम-अभ्यास


24

जब ये सुविधाएँ एंटीमैरिडियन (° 180 ° देशांतर) पर फैली हों, तो भौगोलिक विशेषताओं (रेखाओं, बहुभुजों और उनके मल्टीपार्ट समतुल्य) को संग्रहीत करने के लिए सबसे अच्छा अभ्यास क्या है और इसे जियोजन्स के रूप में क्लाइंट वेब से भेजने और प्राप्त करने की आवश्यकता है?


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

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

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

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

  1. जियोमेट्री की सुविधा में कोई बदलाव न करें और ग्राहक अनुप्रयोगों के लिए अस्पष्टता को स्थानांतरित करें।
  2. एंटीमैरिडियन पर एक ब्रेक के साथ एक मल्टीमार्ट ज्यामिति में एंटीमरीडियन को पार करने वाली किसी भी सुविधा को विभाजित करें । ( जियोसन विनिर्देशन CRS नाम का समर्थन करता है ।)
  3. विभिन्न चक्रवात बेसिनों या महासागरीय क्षेत्रों के लिए गैर-वैश्विक अनुमानों के साथ काम करना जिनके पास इस तरह की असंगति नहीं है
  4. इस तथ्य को उजागर करते हुए कि पूरे ग्रह की यात्रा करने के लिए एक चक्रवात कभी नहीं देखा गया है, (90,-90) एक 360 ° चरण (अन्य -180-180 ° रखते हुए) द्वारा अक्षांश सीमा में शुरू होने वाले चक्रवातों के निर्देशांक को संग्रहीत करें।
  5. इस तथ्य को उजागर करते हुए कि एक चक्रवात अफ्रीका के दक्षिणी सिरे के दक्षिण में बहुत कम संभावना है, 30 ° देशांतर (उपरोक्त मानचित्र में) पर एक ब्रेक का उपयोग करें ।
  6. निर्देशांक को EPSG 4326 , जैसे> 180 ° और <-180 ° की वैध सीमा से आगे बढ़ाने की अनुमति दें , जो एंटीमाइरिडियन से गुजरती हैं।
  7. डेल्टा एन्कोडिंग , TopoJSON में जैसे (उदाहरण के लिए शुरू (0,-179)और फिर अगले समन्वय -3अक्षांश पश्चिम में है)। मुझे पता नहीं है कि PostGIS में डेटा संग्रहीत करते समय इसे लागू करना है या नहीं, लेकिन क्लाइंट एप्लिकेशन को डेटा भेजने के लिए यह एक बढ़िया समाधान है।
  8. वेक्टर संकेतन या ध्रुवीय निर्देशांक के कुछ रूप। (बल्कि मुश्किल और असामान्य लगता है।)

इनमें से, मुझे विचार 2-5 पसंद नहीं हैं क्योंकि वे सामान्य नहीं हैं, लेकिन मैं उन्हें पसंद करता हूं क्योंकि वे मेरे विशेष एप्लिकेशन के लिए कुछ अर्थ रखते हैं। केवल प्रशांत महासागर में डेटा से निपटने वाले अनुप्रयोगों के लिए, वे बहुत अधिक समझ में आ सकते हैं, इसलिए मैं उन्हें विकल्प के रूप में पूरी तरह से छूट नहीं देना चाहता।

विचार 6 और 7 को टॉम मैकवर्थ के ब्लॉग से हटा दिया गया था , जो पढ़ने लायक है, लेकिन एंटीमेरिडियन के संबंध में निर्णायक नहीं है।

Idea 4 का उपयोग जियोग्राफिका 'GeodesicLinesToGISPython द्वारा किया जाता है , जो बदले में fiona.transform.transform_geomएक 360 ° एंटीमिरिडियन ऑफसेट के साथ उपयोग कर रहा है । बदले में, फियोना OGR का उपयोग कर रहा है -wrapdateline। मुझे लगता है कि यह एक बहुत ही ठोस मिसाल है और वास्तव में सामान्य है।

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

दुर्भाग्य से जियोजन्स विनिर्देश एंटीमैरिडियन मुद्दों के बारे में स्पष्ट नहीं है। विकिपीडिया से यह :

कई भौगोलिक सॉफ़्टवेयर लाइब्रेरी या डेटा प्रारूप दुनिया को एक आयत के रूप में प्रस्तुत करते हैं; बहुत बार यह आयत 180 वें मध्याह्न रेखा पर विभाजित होती है। यह अक्सर 180 वें मध्याह्न रेखा पर सरल कार्य (जैसे क्षेत्र, या रेखा का प्रतिनिधित्व) करना असंभव बनाता है। कुछ उदाहरण:

  • GeoJSON विनिर्देशन अपने विनिर्देश में 180 वें मध्याह्न की हैंडलिंग का उल्लेख नहीं करता है, इस प्रकार, 180 वीं मध्याह्न रेखा को पार करने वाली रेखाओं का प्रतिनिधित्व केवल दुनिया भर में जाने के रूप में व्याख्या किया जा सकता है।

  • OpenStreetMap में, क्षेत्रों (रूस की सीमा की तरह) 180 वें मध्याह्न रेखा पर विभाजित हैं।

मेरा पढ़ना यह है कि जियोजन्स में एंटीमेडियन-स्पैनिंग विशेषताओं का कोई विशेष मानक प्रतिनिधित्व नहीं है, और यह जानबूझकर अस्पष्ट (बहु-भाग ज्यामितीय शायद समस्या को हल करेगा)। इसी तरह OpenStreetMap में एंटीमैरिडियन में ज्यामिति विभाजन होते हैं, हालांकि मुझे नहीं पता कि इस तरह की विभाजन विशेषताएं मल्टीपार्ट हैं या वास्तव में असतत रिकॉर्ड हैं।

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


1
यह वास्तव में एक अच्छा सवाल है, पहले मैंने 90 डिग्री से शुरू होने वाले हाथ से बने समन्वय प्रणाली का उपयोग किया है लेकिन मैं केवल एक बहुत ही छोटे क्षेत्र से संबंधित था। वहाँ वास्तव में कुछ भी नहीं है 'ठीक से लपेटो' के लिए; मैं यह अनुमान लगा रहा हूं क्योंकि 180 का कोई भूस्वामी (महत्व) नहीं है और बहुत कम लोगों को इस पर मैप करना पड़ता है पूरी समस्या पर बहुत कम ध्यान दिया जाता है।
माइकल स्टिमसन

बड़ा सवाल है। मुझे लगता है कि आप बिंदु 4 के साथ भाग्य को लुभा रहे हैं, हालांकि व्यवहार में कोई कारण नहीं है कि निर्देशांक 360 से अधिक का विस्तार नहीं कर सके, उन्हें ठीक करने के लिए मॉड का उपयोग कर। डेल्टा सबसे अधिक विलुप्त होने वाले समाधान की तरह लगता है, और यहां तक ​​कि डेटा संपीड़न के संदर्भ में कुछ लाभ भी हो सकता है, लेकिन, जैसा कि आप कहते हैं, ग्राहक को जिम्मेदारी सौंप देता है।
जॉन पॉवेल

जियोसन के बारे में कुछ टिप्पणियां अब 1.0 आरसी के बाद से पुरानी हैं। एक उदाहरण है कि जियोसन में सीआरएस परिभाषाएँ पदावनत हैं ( sgillies.net//2014/08/06/pruning-crs-from-geojson.html )। मैं इसे अंततः संपादित करूँगा।
अल्फाबेटसअप

जवाबों:


7

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

उदाहरण के लिए, तवेनी , फ़िजी ( ग्रेट सर्कल मैपर के साथ मैप किया गया ) पर एक लाइनस्ट्रिंग पर विचार करें , जो एंटीमिडियन को स्ट्रैडल करता है:

SELECT ST_Length('LINESTRING(179.9 -17, -179.8 -16.7)'::geography);

इस जियोडेसिक की लंबाई लगभग 46 किमी है। इसी तरह, ST_Area द्वीप के बहुभुज पर सही ढंग से काम करेगा, यहां तक ​​कि देशांतर निर्देशांक +179 और -179 के बीच कूदते हुए।

एक EPSG कास्टिंग: 4326 geometryएक geographyप्रकार भी निर्देशांक को सामान्य करता है, उदाहरण के लिए अंतिम समन्वय का देशांतर> 180 है:

SELECT ST_AsGeoJSON('LINESTRING (179.9 -17, 180.2 -16.7)'::geography);

NOTICE:  Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY
                           st_asgeojson
------------------------------------------------------------------
 {"type":"LineString","coordinates":[[179.9,-17],[-179.8,-16.7]]}

geographyपहले उदाहरण में ठीक उसी प्रकार में परिवर्तित किया गया है , लेकिन अब जियोसन आउटपुट के साथ। आप नोटिस (या जैसे SET client_min_messages TO WARNING;) को अनदेखा करने के लिए चुन सकते हैं , और सभी प्रकार के मजाकिया दिखने वाले ज्यामितीय geographyप्रकारों में परिवर्तित कर सकते हैं ।


दिखा रहा है geographyPostGIS बाहर नक्शे पर प्रकार एक अलग कहानी है, और उम्मीद है कि सही उत्तर इस पहलू पर स्पर्श करेगा।


2
एक सीमा यह है कि एक भूगोल 180 see ( उन्नत एफएक्यू देखें ) से अधिक / व्यापक नहीं होना चाहिए । हालाँकि, आप इस नियम का उपयोग केवल शीर्षों के लिए कर सकते हैं और कुछ इस तरह मूर्खतापूर्ण कार्य कर सकते हैं : LINESTRING(179.9 -17, 60 -16.9, -60 -16.8, -179.8 -16.7)जो कि चारों ओर लपेटता है।
माइक टी

0

निश्चित रूप से, पसंदीदा उत्तर (1) है, अर्थात, ग्राहक "सही काम" करते हैं। विचार करने के लिए एक अच्छा मामला है कि बहुभुज इस किमी फ़ाइल द्वारा अंटार्कटिका महाद्वीप का प्रतिनिधित्व करता है

<kml> <Folder> <name>Antarctica</name> <Placemark> <name>Antarctica</name> <Polygon> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> -58,-63.1,0 -74,-72.9,0 -102,-71.9,0 -102,-74.9,0 -131,-74.3,0 -163,-77.5,0 163,-77.4,0 172,-71.7,0 140,-65.9,0 113,-65.7,0 88,-66.6,0 59,-66.9,0 25,-69.8,0 -4,-70,0 -14,-71,0 -33,-77.3,0 -46,-77.9,0 -61,-74.7,0 -58,-63.1,0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> </kml>

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

आश्चर्यजनक रूप से, Google धरती प्रो इस बहुभुज को सही ढंग से प्रदर्शित नहीं करता है (जब तक कि आप "रूपरेखा" मोड का उपयोग नहीं करते हैं)। यहाँ देखें Google धरती प्रो से स्क्रीन शॉट


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

काफी उचित। हालाँकि, यह देखते हुए कि kml निर्देशांक अक्षांश और देशांतर तक ही सीमित हैं, ऐसा कुछ भी नहीं है जो आप, उपयोगकर्ता, इस विशेष उदाहरण में Google धरती की मदद करने के लिए कर सकते हैं। ग्राहक की ओर से इस समस्या को ठीक करने के लिए Google धरती अनुरक्षकों पर onus है। (दुर्भाग्य से, वे ऐसा करने का थोड़ा झुकाव दिखाते हैं!)
cffk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.