sql >> Databasteknik >  >> RDS >> Oracle

Beräkna avståndet mellan två lat långa 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-beräkningen returnerar 110,611186 km

Den på din webbplats returnerar 111,19 km alltså en skillnad på 580 m . Den skillnaden beror på att din onlineräknare använder enkel matematik under antagande om en sfärisk jorden, medan Oracle använder den korrekta ellipsoiden jordens form (WGS84-ellipsoiden).

Du kan se skillnaden på https://www.fai.org/page/world -avståndskalkylator Om du väljer WGS84 jordmodell (WGS84-ellipsoiden) så får du samma resultat som Oracle (110.611186562098). Om du ändrar den till FAI Sphere då får du 111.19492643325476, samma som din komparator.

Rätt sträcka är 110,611 km. Huruvida det är viktigt att beräkna den med 580 m avstånd beror på din applikation. Om du mäter korta avstånd (som en km eller mindre) är felet försumbart. Men för långa avstånd kan det vara betydande. Här skulle det innebära att missa ett mål med 1/2 km!

Det visar vikten av att använda rätt jordmodell för dessa beräkningar.

EDIT: Och Oracle-representationen (och i stort sett alla GIS-verktyg) är longitud, latitud . Om du byter siffror kommer du att få väldigt olika resultat.



  1. Får vi interagera med ett psql-skript?

  2. Skapa MySQL-frågeövervakningsbash-skript

  3. skapa en vy som får rang, användarnamn och antal användarposter

  4. Ansluter till MySQL Database via server