हवाई जहाज की मानचित्र सीमा


10

मैं एक (वेब) नक्शा बनाना चाहता हूं, जो कुछ हवाई अड्डों के आसपास एक हवाई जहाज की श्रेणी दिखा रहा है।

मैंने हवाई जहाज की सीमा के साथ एक बफर की गणना करने की कोशिश की। यहाँ आप परिणाम देख सकते हैं यहां

लेकिन अब मैंने महसूस किया है कि परिणाम गलत है क्योंकि विमान सीधे मार्ग को नहीं लेते हैं, लेकिन वक्र छोटा होने के कारण उड़ान भरते हैं।

क्या छोटी वक्र के साथ सीमा की गणना करने का कोई तरीका है?

जवाबों:


20

आप महान-सर्कल दूरी का उपयोग करके एक सर्कल का वर्णन करने के लिए proj4 लाइब्रेरी का उपयोग कर सकते हैं ।

उदाहरण के लिए, यहाँ एडिनबर्ग, टोक्यो, केप टाउन और क्विटो से wgs84 / Equirectangular में 3000 किमी का दायरा। भूमध्य रेखा से निकटता के कारण केवल क्विटो अस्पष्ट रूप से 'गोल' है। मैंने 36 डिग्री (लगभग NE) के अज़ीमुथ में एक एकल सघन स्पोक लाइन में भी जोड़ा है

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

अगर हम एडिनबर्ग पर केंद्रित अजीमुथल इक्विडिस्टेंट प्रोजेक्शन में बदल जाते हैं, तो आप एडिनबर्ग के चारों ओर के दायरे को एक सर्कल में हल करते हुए देखेंगे ...

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

मर्केटर पर (अपने वेब ऐप की तरह), आप भूमध्य रेखा से दूर जाते हुए अधिक विकृति देखते हैं, लेकिन बफ़र्स अधिक अण्डाकार होते हैं।

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

निम्नलिखित पायथन कोड वह करता है ( जिसकी आवश्यकता pyproj और सुडौल होती है )

import pyproj
from shapely.geometry import Polygon, MultiPoint, LineString
import math

def geodesicpointbuffer(longitude, latitude,
                        segments, distance_m,
                        geom_type=MultiPoint):
    """
    Creates a buffer in meters around a point given as long, lat in WGS84
    Uses the geodesic, so should be more accurate over larger distances

    :param longitude: center point longitude
    :param latitude: center point latitude
    :param segments: segments to approximate (more = smoother)
    :param distance_m: distance in meters
    :param geom_type: shapely type (e.g. Multipoint, Linestring, Polygon)
    :return: tuple (proj4 string, WKT of buffer geometry)
    """
    geodesic = pyproj.Geod(ellps='WGS84')
    coords = []
    for i in range(0, segments):
        angle = (360.0 / segments) * float(i)
        x1, y1, z1 = geodesic.fwd(lons=longitude,
                                  lats=latitude,
                                  az=angle,
                                  dist=distance_m,
                                  radians=False)
        coords.append((x1, y1))
        # makes a great circle for one spoke.
        if i==200:
            example = geodesic.npts(longitude,latitude,x1,y1,1000)
            coords2 = []
            for xx,yy in example:
                coords2.append((xx,yy))
            coords2.append((x1,y1)) # make sure we include endpoint ;-)
            flight = LineString(coords2)
            print(flight.wkt)

    ring = geom_type(coords)
    return "+init=EPSG:4326", ring.wkt


def main():
    # example : Cape Town. 3000km buffer.
    spec, wkt = geodesicpointbuffer(18.4637082653, -33.8496404007, 2000, 3000000.0, Polygon)
    print(spec)
    print(wkt)

if __name__ == "__main__":
    main()

आप उपयोगी QuickWKT प्लगइन का उपयोग करके QGIS में WKT आउटपुट पेस्ट कर सकते हैं ।

आप अन्य विधियों का उपयोग कर सकते हैं - जैसा कि उल्लेख किया गया है, आप अपने शुरुआती बिंदु पर केंद्रित मीटर में एक कस्टम इक्विडिस्टेंट प्रोजेक्शन पर एक सर्कल बना सकते हैं। हालांकि मुझे लगता है कि बड़ी दूरी के लिए एक त्रुटि ढलान (केवल 2000 किमी पर कुछ किमी, लेकिन अंतरमहाद्वीपीय दूरी के लिए ये त्रुटियां माउंट हो सकती हैं)

मेमोरी से, mmqgis प्लगइन किमी में बफरिंग की अनुमति देता है। मुझे यकीन नहीं है कि यह किस विधि का उपयोग करता है, हालांकि।

ध्यान दें कि आप QGIS में बहुभुज कि एंटीमेरिडियन पार आप एशिया में शुरू कर रहे हैं, तो प्रतिपादन समस्याएं हो रही हों - ogr2ogr साथ -wrapdateline विकल्प यहाँ कर सकते हैं। आप पा सकते हैं कि यह ओपनर / लीफलेट, IIRC के साथ एक समस्या से कम है, वे 180 से अधिक अक्षांशों और -180 से कम की अनुमति देते हैं।

यहाँ esri ब्लॉग पर जियोडेसिक बफरिंग के बारे में एक अच्छा राइटअप है


8

आपकी दूरी की जानकारी कहां से आ रही है, इस पर निर्भर करता है, यह कोई फर्क नहीं पड़ता। यदि आपके पास दूरी देने वाली एक सरल संख्या है, तो दूरी किसी भी मानचित्र प्रक्षेपण पर समान होगी जो दूरी को सटीक रूप से दिखाती है (मर्केटर नहीं, किसी भी "इक्विडिस्टेंट" प्रक्षेपण के बारे में सोचें, जैसे कि अज़ीमुथल ऑर्थोग्राफ़िक प्रक्षेपण या समान। एक अनुरूप प्रक्षेपण। लैंबर्ट कॉनफॉर्मल कॉनिक की दूरी पर यथोचित रूप से ठीक काम करेगा।) यदि आप समतुल्य प्रक्षेपण में बफ़र्स की गणना और निर्माण करते हैं, तो वे (काफी) सटीक होंगे, यहां देखें कि दूरी की गणना कैसे की जाती है: ArcGIS सहायता

परत का समन्वय प्रणाली सेट करना सुनिश्चित करें एक समकालिक प्रक्षेपण में है, न कि केवल डेटा फ्रेम।

एक बार गणना करने के बाद, वेब मर्केटर या जो भी अन्य वेब प्रोजेक्शन आप उपयोग करने का इरादा रखते हैं, उसी के अनुसार बफर ताना देगा।

जहाँ तक कि रेखाएँ स्वयं वक्र क्यों हैं, और यह समस्याएँ क्यों पैदा कर सकती हैं:

मुख्य समस्या यह है कि इस तरह के एक के रूप में एक Mercator प्रक्षेपण पर विमान मार्गों घुमावदार के रूप में प्रदर्शित कर रहे हैं, जैसे:

एयर कनाडा मार्ग का नक्शा

यह मर्केटर के नक्शे के साथ एक मूल समस्या है, क्योंकि वे समुद्री नेविगेशन के लिए अभिप्रेत हैं, जहां इन अनुमानों पर सीधी रेखाओं के गुण मूल्यवान हैं (एक व्यापारी रेखा पर एक सीधी रेखा एक तुच्छ रेखा है; एक पंक्ति जो समान कम्पास के साथ गुजरती है। पूरी यात्रा)।

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


ईंधन दक्षता और गंतव्य के लिए जितनी जल्दी हो सके
21

... जो वास्तविक रास्ता जेट स्ट्रीम को ध्यान में रखेगा।
विंस

2
गैल-पीटर्स समान-क्षेत्र प्रक्षेपण है जो समान नहीं है। समतुल्य के लिए आप अपने स्रोत पर केंद्रित एक अजीमुथल ऑर्थोग्राफ़िक प्रोजेक्शन जैसा कुछ चाहते हैं।
HeikkiVesanto

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