Kartenbereich der Flugzeuge

10

Ich möchte eine (Web-) Karte erstellen, die die Reichweite eines Flugzeugs um einige Flughäfen zeigt.

Ich habe versucht, einen Puffer mit der Reichweite des Flugzeugs zu berechnen. Hier können Sie das Ergebnis hier sehen .

Aber jetzt habe ich festgestellt, dass das Ergebnis falsch ist, weil Flugzeuge nicht die gerade Route nehmen, sondern eine Kurve fliegen, weil sie kürzer ist.

Gibt es eine Möglichkeit, den Bereich mit der kürzeren Kurve zu berechnen?

Riker
quelle

Antworten:

20

Mit der proj4- Bibliothek können Sie einen Kreis anhand des Großkreisabstands beschreiben.

Hier ist zum Beispiel ein Radius von 3000 km von Edinburgh, Tokio, Kapstadt und Quito in wgs84 / Equirectangular. Nur Quito ist aufgrund seiner Nähe zum Äquator vage "rund". Ich habe auch eine einzelne verdichtete Speichenlinie mit einem Azimut von 36 Grad (ca. NE) hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Wenn wir zu einer azimutalen äquidistanten Projektion mit Schwerpunkt auf Edinburgh wechseln, wird der Radius um Edinburgh in einen Kreis aufgelöst ...

Geben Sie hier die Bildbeschreibung ein

Auf Mercator (wie in Ihrer Web-App) sehen Sie mehr Verzerrungen, wenn Sie sich vom Äquator entfernen, aber die Puffer sind elliptischer.

Geben Sie hier die Bildbeschreibung ein

Der folgende Python - Code tut dem (erfordert pyproj und wohlgeformt )

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()

Sie können die WKT-Ausgabe mit dem nützlichen QuickWKT- Plugin in QGIS einfügen .

Sie können auch andere Methoden verwenden. Wie bereits erwähnt, können Sie auf einer benutzerdefinierten äquidistanten Projektion in Metern einen Kreis erstellen, der auf Ihrem Startpunkt zentriert ist. Ich finde jedoch, dass sich bei großen Entfernungen ein Fehler einschleicht (nur wenige Kilometer bei 2000 km, aber bei interkontinentalen Entfernungen können diese Fehler auftreten).

Aus dem Speicher ermöglicht das mmqgis- Plugin das Puffern in km. Ich bin mir jedoch nicht sicher, welche Methode es verwendet.

Beachten Sie, dass Sie möglicherweise Probleme beim Rendern von Polygonen in QGIS haben, die den Antimeridian überschreiten, wenn Sie in Asien starten. Ogr2ogr mit der Option -wrapdateline kann hier Abhilfe schaffen. Möglicherweise ist dies bei Openlayern / Faltblättern weniger problematisch. IIRC ermöglichen Längengrade von mehr als 180 und weniger als -180.

Hier im esri-Blog gibt es eine gute Beschreibung der geodätischen Pufferung .

Steven Kay
quelle
8

Abhängig davon, woher Ihre Entfernungsinformationen stammen, spielt dies möglicherweise keine Rolle. Wenn Sie eine einfache Zahl haben, die die Entfernung angibt, ist die Entfernung auf jeder Kartenprojektion gleich, die die Entfernung genau anzeigt (nicht Mercator, denken Sie an so ziemlich jede "äquidistante" Projektion, wie eine azimutale orthografische Projektion oder ähnliches. Eine konforme Projektion, wie Lambert Conformal Conic wird in der Ferne einigermaßen gute Arbeit leisten.). Wenn Sie die Puffer in einer äquidistanten Projektion berechnen und schaffen, werden sie (ziemlich) genau sein, siehe hier, wie Entfernung berechnet: ArcGIS Hilfe

Stellen Sie sicher, dass sich das Koordinatensystem der Ebene in einer äquidistanten Projektion befindet, nicht nur im Datenrahmen.

Nach der Berechnung verzieht sich der Puffer entsprechend, wenn er in Web Mercator oder eine andere Webprojektion eingefügt wird, die Sie verwenden möchten.

Was den Grund betrifft, warum die Linien selbst gekrümmt sind und warum dies zu Problemen führen kann:

Das Hauptproblem besteht darin, dass ebene Routen auf einer Mercator-Projektion wie dieser wie folgt gekrümmt angezeigt werden:

Air Canada Streckenkarte

Dies ist ein grundlegendes Problem bei Mercator-Karten, da diese für die nautische Navigation vorgesehen sind, bei der die Eigenschaften von Geraden auf diesen Projektionen wertvoll sind (eine Gerade auf einer Mercator-Projektion ist eine Loxodrome; eine Linie mit demselben Kompass führt durch die gesamte Reise).

Flugzeuge fliegen jedoch nicht auf Loxodromen, da die Kraftstoffeffizienz wichtiger ist als die einfache Navigation, und fliegen daher entlang großer Kreise, die auf einer Mercator-Projektion als Kurven erscheinen.

Coneypylon
quelle
Kraftstoffeffizienz und so schnell wie möglich ans Ziel kommen .
cffk
... weshalb der tatsächliche Pfad den Jet Stream berücksichtigt.
Vince
2
Gall-Peters ist eine flächengleiche Projektion, die nicht gleich weit entfernt ist. Bei gleichem Abstand möchten Sie so etwas wie eine azimutale orthografische Projektion, die auf Ihrer Quelle zentriert ist.
HeikkiVesanto
Ja, ich habe nicht nachgedacht. Eine konforme Projektion wird auch einen vernünftigen Job bei der Wahrung der Distanz machen, ja
Coneypylon