ग्रेट सर्कल आर्क बनाना जो वेब मर्केटर मैप पर अच्छा लगता है?


11

मैं कुछ उड़ानों को इंगित करने वाले डेटा के साथ एक मानचित्र बनाने की कोशिश कर रहा हूं, और स्रोत और गंतव्यों को जोड़ने के लिए ग्रेट सर्कल आर्क का उपयोग करना चाहता हूं।

मूल रूप से, मैं प्रसिद्ध फेसबुक मानचित्र के समान कुछ करना चाहता हूं: यहां छवि विवरण दर्ज करें

मैंने इस पोस्ट में दिए गए कार्यों का उपयोग किया: https://gis.stackexchange.com/a/5205/442 , (अर्थात यह ब्लॉग लेख: http://anitagraser.com/2011/08/20/visualizing-global-connections / ) और मुझे रेखाएँ मिल सकती थीं, लेकिन वे अंतर्राष्ट्रीय तिथि रेखा को पार करते हैं, साथ ही साथ डंडों को झुकाते हैं:

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

@underdark ने लिंक किए गए ब्लॉगपोस्ट में उल्लेख किया है कि इन लाइनों को विभाजित करने की आवश्यकता है, लेकिन मुझे नहीं पता कि उन्हें पोस्टजीआईएस में स्वचालित रूप से कैसे विभाजित किया जाए।

इसके अतिरिक्त डंडों के पास की पंक्तियों को भी हल करने की आवश्यकता है।

मैं इन दोनों को कैसे करूं, जब मेरे पास इन उड़ानों की शुरुआत और समाप्ति के लिए बिंदु स्थान हैं?


क्या आप एक ध्रुवीय प्रक्षेपण का उपयोग कर सकते हैं?
इयान Turton

2
मैंने यहाँ कुछ उदाहरण दिए हैं: gis.stackexchange.com/questions/133026/… । ध्यान दें कि eqdc सच्चे महान-मंडलियों को वितरित नहीं करता है, लेकिन aeqd करता है।
आंद्रे जे

जवाबों:


5

इस ब्लॉग में सिद्धांतों को सामान्य प्रयोजन के पोस्टजीआईएस पर स्थानांतरित किया जाता है।

http://blog.cartodb.com/jets-and-datelines/

मूल रूप से, ST_Segmentizeभूगोल पर उपयोग करें , और तारीख-रेखा पार करने वाली रेखाओं को टुकड़ा करने के लिए थोड़ा सा जादू।


8

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

from geographiclib.geodesic import Geodesic
from geojson import MultiLineString

def geodesic(lat1, lon1, lat2, lon2, steps):
    inverse = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2)
    linestrings = []
    coordinates = []

    for i in range(0, steps + 1):
        direct = Geodesic.WGS84.Direct(inverse['lat1'], inverse['lon1'], inverse['azi1'], (i / float(steps)) * inverse['s12'])
        if len(coordinates) > 0:
            if (coordinates[-1][0] < -90 and direct['lon2'] > 90) or (coordinates[-1][0] > 90 and direct['lon2'] < -90):
                linestrings.append(coordinates)
                coordinates = []
        coordinates.append((direct['lon2'], direct['lat2']))

    linestrings.append(coordinates)
    geojson = MultiLineString(linestrings)
    return geojson

linestrings = []

# San Francisco: 37.7793, -122.4192
# Bangalore: 12.9, 77.616667
for linestring in geodesic(37.7793, -122.4192, 12.95, 77.616667, 100)['coordinates']:
    linestrings.append(linestring)

# Boston: 42.357778, -71.059444
# Bangalore: 12.9, 77.616667
for linestring in geodesic(42.357778, -71.059444, 12.95, 77.616667, 100)['coordinates']:
    linestrings.append(linestring)

print(MultiLineString(linestrings))

परिणाम डब्ल्यूजीएस -84 में बिंदुओं के बीच वास्तविक जियोडेसिक है। बेशक, आप तब निर्देशांक को रूपांतरित कर सकते हैं, जो भी प्रक्षेपण की आवश्यकता है। परिणाम geojson.io पर इस तरह दिखता है:

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


2
GeographicLib के साथ ऐसा करने का एक विकल्प (और तेज़!) के लिए geographiclib.sourceforge.net/html/python/… देखें । ध्यान दें कि देशांतरों की निरंतरता सुनिश्चित करने के लिए LONG_UNROLL ध्वज का उपयोग किया जाता है।
16 cffk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.