अंतर्राष्ट्रीय डेटलाइन में बहुभुज [-180 .. + 180 देशांतर]


10

मैं उपग्रह कक्षीय स्वाथियों के लिए बहुभुज उत्पन्न करने की कोशिश कर रहा हूं। अब तक मेरे पास दो पंक्तियों को उत्पन्न करने की एक विधि है जो प्रत्येक स्वाथ के किनारे को [lat, long] में दर्शाती है। स्वाथ में से कुछ अंतर्राष्ट्रीय डेटलाइन को पार करते हैं और इसलिए गोल लपेटते हैं:

चारों ओर स्वाथ लपेट

मैं इसे हल करने में सक्षम था ogr2ogr -wrapdateline:

ogr2ogr -wrapdateline  -f "ESRI Shapefile" test.shp orbits.shp

जो शायद रेखाओं को विभाजित करता है

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

भरण

मुझे एक ऐसी विधि की आवश्यकता है जो स्वचालित हो क्योंकि मुझे कार्य को बहुत दोहराने की आवश्यकता है। अधिमानतः अजगर में के रूप में मैं कैसे लाइनों उत्पन्न किया है। यहाँ दो शेपफाइल्स हैं जिनमें रेखाएँ हैं: रैपपराउंड ; datelinefixed


अतिरिक्त विचारों के लिए संबंधित धागे gis.stackexchange.com/questions/429 और gis.stackexchange.com/questions/18562 पर देखें । निश्चित रूप से gis.stackexchange.com/questions/17788 में प्रस्तुत विचार मददगार हो सकते हैं। मुझे आश्चर्य है, हालांकि, "इंटीरियर" से आपका क्या मतलब है: ये बहुभुज अच्छी तरह से परिभाषित नहीं हैं, इसलिए आपको इंगित करने के लिए न्यूनतम आपूर्ति करने की आवश्यकता है (ए) प्रत्येक पॉलीलाइन के किस पक्ष को "इंटीरियर" माना जाता है और (बी) कैसे डंडों के पास उन्हें काटने के लिए।
whuber

जवाबों:


3

आप स्वैथ के केंद्र पर केंद्रित कस्टम व्यापारी प्रक्षेपण का निर्माण कर सकते हैं। उदाहरण के लिए, स्वाथ 25 के लिए उपयोग करें:

+proj=merc +lon_0=-140 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

इस प्रक्षेपण में, स्वैटर को डेटलाइन द्वारा नहीं तोड़ा जाता है। आप लाइन से बहुभुज बना सकते हैं।

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

फिर ईपीएसजी में -179.95 ° E और 179.95 ° E के बीच एक कट बहुभुज बनाएं: 4326:

Nr;WKT
1;POLYGON ((-179.95 89, 179.95 89, 179.95 -89, -179.95 -89, -179.95 89))

इसे अपने कस्टम CRS में भी दोहराएं, और इसे स्वैथ बहुभुज से घटाएं।

EPSG: 4326 पर वापस भेजने के बाद, स्वाथ को डेटलाइन द्वारा सही ढंग से विभाजित किया गया है:

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

डेटॉल को पार करने वाले सभी स्वाथों को जारी रखें।


1

मैं उसी निरंतर अनुदैर्ध्य अंतरिक्ष में शुरू करने और खत्म करने के लिए स्वेथ लाइन पीढ़ी प्रक्रिया को फिर से लिखूंगा। यदि कोई रेखा 170 ° से शुरू होती है और -170 ° पर समाप्त होती है तो मैं -180,180 पर लपेटे बिना 190 ° पर समाप्त करने की प्रक्रिया को फिर से लिखूंगा।

फिर आप अपनी लाइनों के बीच अखंड बहुभुज बना सकते हैं।

फिर 180, -180 लाइन पर पॉलीगॉन को विभाजित करने के लिए एक क्लिप प्रक्रिया का उपयोग करें और किसी भी हिस्से को शिफ्ट करें जो कि उपयुक्त के रूप में 360 ° जोड़ या घटाकर -180,180 स्थान के बाहर झूठ हो।

बस इसे एक विशेष प्रोजेक्शन / डेटम से बचाने से पहले ही पूरा कर लें


1

इस विचार के लिए @AndreJ को धन्यवाद, यहाँ Django GEOS API का उपयोग करना एक सरल उपाय है, जिसे पुनः प्रोजेक्ट करने की आवश्यकता से बचा जाता है:

1) एक बहुपत्नी बनाएँ जो डेटलाइन पर बॉर्डर करता है:

from django.contrib.gis.geos.collections import MultiPolygon, LinearRing, Polygon
box1 = ((180.0, 89), (179.95, 89), (179.95, -89), (180.0, -89), (180.0, 89))
box2 = ((-180.0, 89), (-179.95, 89), (-179.95, -89), (-180.0, -89), (-180.0, 89))
poly1 = Polygon(LinearRing(box1))
poly2 = Polygon(LinearRing(box2))
poly = MultiPolygon(poly1, poly2)

2) यदि आपत्तिजनक ज्यामिति में अंतर है, तो अंतर लौटाएँ:

from django.contrib.gis.geos.geometry import GEOSGeometry
geometry = GEOSGeometry(WKT)  # WKT is your polygon in WKT string format
if geometry.intersects(poly):
    print("Geometry crosses dateline... splitting")
    geometry = geometry.difference(poly) # clip with dateline polygon

परिणाम निम्नानुसार दिखाया गया है:

इससे पहले

उपरांत

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