Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Berechnen Sie den Abstand zwischen zwei Lat-Long-Punkten in Oracle

select sdo_geom.sdo_distance(
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 10.0, null), null, null),
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 11.0, null), null, null),
  0.01,
  'unit=KM'
) as distance
from dual;

DISTANCE
----------
110.611186

Die Oracle-Berechnung gibt 110,611186 km zurück

Die auf Ihrer Website gibt 111,19 km zurück also ein Unterschied von 580 m . Dieser Unterschied liegt daran, dass Ihr Online-Rechner einfache Mathematik verwendet und von einer Kugel ausgeht Erde, während Oracle das richtige Ellipsoid verwendet Form der Erde (das WGS84-Ellipsoid).

Sie können den Unterschied auf https://www.fai.org/page/world sehen -Entfernungsrechner Wenn Sie sich für WGS84 entscheiden Erdmodell (das WGS84-Ellipsoid) erhalten Sie dasselbe Ergebnis wie bei Oracle (110.611186562098). Wenn Sie es zu FAI Sphere ändern dann erhalten Sie 111.19492643325476, dasselbe wie Ihr Komparator.

Die korrekte Entfernung beträgt 110,611 km. Ob die Berechnung mit 580 m Abstand wichtig ist, hängt von Ihrer Anwendung ab. Wenn Sie kurze Entfernungen (wie einen Kilometer oder weniger) messen, ist der Fehler vernachlässigbar. Aber für lange Distanzen kann es bedeutend sein. Hier würde es bedeuten, ein Ziel um 1/2 km zu verfehlen!

Es zeigt, wie wichtig es ist, das richtige Erdmodell für diese Berechnungen zu verwenden.

BEARBEITEN: Und die Oracle-Darstellung (und so ziemlich alle GIS-Tools) ist Längengrad, Breitengrad . Wenn Sie die Zahlen vertauschen, erhalten Sie ganz andere Ergebnisse.