Ich führe eine spezielle Analyse durch, bei der wir Shapely verwenden, um Puffer um Punkte (Speicherorte) zu erstellen und dann zu überprüfen, ob andere Punkte (Benutzerstandorte) in diesem Pufferwert vorhanden sind. Wenn ich die Entfernung mit Shapely überprüfe, stellt sich heraus, dass sie sich von der Entfernung unterscheidet, die ich von Geopy erhalte. Die Haversine-Formel stimmt mit Geopy überein, und eine Überprüfung von Google Maps mit der Funktion zum Messen der Entfernung ergibt ebenfalls ungefähr die gleiche Entfernung
Hier ist ein Beispiel:
from shapely.geometry import Point, shape
from pyproj import Proj, transform
from geopy.distance import vincenty, great_circle
pt_store=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.799614, 39.435307))
pt_user=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.79989,39.43604))
vincenty((39.435307,-76.799614),(39.43604,-76.79989)).meters
great_circle((39.435307,-76.799614),(39.43604,-76.79989)).meters
pt_store.distance(pt_user)
Vincenty: 84.77847691521336
Great_circle: 84.90640111682812
Shapely: 110.02637304449682
Haversine-Formel ( http://www.movable-type.co.uk/scripts/latlong.html ): 84,88
Welcher ist richtig? Formschön oder andere? Wird auch ein so großer Unterschied (~ 22%) erwartet? Oder fehlt mir etwas?
EPSG:3857
- Shapely ist hier die falsche Wahl. Web Mercator ist nicht konform und sollte nicht zur Berechnung von Entfernungen verwendet werden.Und hier ist eine weitere Entfernungsberechnung von GeographicLib :
Ich würde dies innerhalb von 15 Nanometern als das Richtige betrachten.
quelle