sql >> Database teknologi >  >> RDS >> Oracle

Beregn afstanden mellem to lat lange punkter i 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

Oracle-beregningen returnerer 110,611186 km

Den på dit websted returnerer 111,19 km altså en forskel på 580 m . Denne forskel skyldes, at din online-beregner bruger simpel matematik forudsat en sfærisk jorden, hvorimod Oracle bruger den korrekte ellipsoide jordens form (WGS84-ellipsoiden).

Du kan se forskellen på https://www.fai.org/page/world -afstandsberegner Hvis du vælger WGS84 jordmodellen (WGS84-ellipsoiden) så får du samme resultat som Oracle (110.611186562098). Hvis du ændrer den til FAI Sphere så får du 111.19492643325476, det samme som din komparator.

Den korrekte distance er 110.611 km. Om det er vigtigt at beregne den med 580 m off, afhænger af din applikation. Hvis du måler korte afstande (som en km eller mindre), er fejlen ubetydelig. Men for langdistance kan det have betydning. Her ville det betyde, at man misser et mål med 1/2 km!

Det viser vigtigheden af ​​at bruge den korrekte jordmodel til disse beregninger.

EDIT: Og Oracle-repræsentationen (og stort set alle GIS-værktøjer) er længdegrad, breddegrad . Hvis du bytter tallene, så får du meget forskellige resultater.



  1. SQLite udtryksbaseret indeks

  2. Gruppér efter måned og år i MySQL

  3. Vælg forskellige værdier fra 1 kolonne

  4. Skal trække sidste x antal rækker baseret på dato