Mehr

Erstellen eines Kreises mit Radius in Metern


Ich verwende Shapely und Python.

Wie soll ich einen Kreis mit Shapely erstellen, dessen Radius in Metern angegeben ist?

Wenn ich benutze

sampleCircle = Point(1,1).buffer(1) print sampleCircle.area

Dies gibt eine Fläche von 3,13654849055 zurück. Wie interpretiere ich die Einheit dieses Bereichs? Ich habe gelesen, dass dies in Quadratgrad interpretiert werden kann, suche jedoch nach einer etwas weiteren Erklärung.

Wie erstelle ich außerdem einen Kreis mit einem angegebenen Radius (in Metern) um einen Punkt (definiert mit lat,long)?

Der nächste Artikel, den ich gefunden habe, war dieser [http://comments.gmane.org/gmane.comp.python.gis/1582], aber es fehlt eine konkrete Lösung


Formal kennt Shapely keine Koordinatenbezugssysteme oder -einheiten. Um damit reale Probleme zu lösen, müssen Sie lernen, Längen- und Breitengrade in ein annähernd ebenes lokales Referenzsystem (wie ein US State Plane) umzuwandeln, und Sie müssen Ihre eigenen Einheiten verfolgen. Ich benutze pyproj, um dies zu tun, aber Sie können verwenden, was Sie wollen. Nachdem Sie Ihre Längen- und Breitengrade in x- und y-Meter umgewandelt haben,Punkt(x, y).Puffer(1.0).Flächeist die Fläche in m^2 Ihres Kreises (64-seitiges Polygon, um genau zu sein).


Basierend auf dem von Ihnen angegebenen Link (fast alle Arbeiten werden dort erledigt), können Sie ein Polygon erhalten, das diesen Kreis darstellt (64-seitiges Polygon).

von functools importieren partiell pyproj von shapely importieren Geometrie von shapely.geometry importieren Punkt von shapely.ops importieren transform lon, lat = -122.431297, 37.773972 # lon lat für San Francisco radius = 10000 # in m local_azimuthal_projection = "+proj=aeqd + R=6371000 +units=m +lat_0={} +lon_0={}".format( lat, lon ) wgs84_to_aeqd = partiell( pyproj.transform, pyproj.Proj("+proj=longlat +datum=WGS84 +no_defs") , pyproj.Proj(local_azimuthal_projection), ) aeqd_to_wgs84 = partiell( pyproj.transform, pyproj.Proj(local_azimuthal_projection), pyproj.Proj("+proj=longlat +datum=WGS84 +no_defs"), ) center = Point(float) ), float(lat)) point_transformed = transform(wgs84_to_aeqd, center) buffer = point_transformed.buffer(radius) # Hole das Polygon mit den lat lon Koordinaten circle_poly = transform(aeqd_to_wgs84, buffer)