sql >> Base de Datos >  >> RDS >> Oracle

Calcule la distancia entre dos puntos de latitud larga en 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

El cálculo de Oracle arroja 110,611186 km

El de su sitio devuelve 111,19 km entonces un desnivel de 580 m . Esa diferencia se debe a que su calculadora en línea usa matemáticas simples asumiendo una esférica tierra, mientras que Oracle usa el elipsoidal adecuado forma de la tierra (el elipsoide WGS84).

Puedes ver la diferencia en https://www.fai.org/page/world -calculadora-de-distancia Si elige el WGS84 modelo terrestre (el elipsoide WGS84), obtiene el mismo resultado que Oracle (110.611186562098). Si lo cambias a FAI Sphere entonces obtienes 111.19492643325476, lo mismo que tu comparador.

La distancia correcta es 110,611 km. La importancia de calcularlo con 580 m de descuento depende de su aplicación. Si mide distancias cortas (como un km o menos), el error es insignificante. Pero para larga distancia puede ser significativo. ¡Aquí significaría perder un objetivo por 1/2 km!

Muestra la importancia de usar el modelo terrestre correcto para esos cálculos.

EDITAR: Y la representación de Oracle (y prácticamente todas las herramientas GIS) es longitud, latitud . Si intercambia los números, obtendrá resultados muy diferentes.