Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Calcular distância entre dois pontos longitudinais no 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

O cálculo da Oracle retorna 110,611186 km

O do seu site retorna 111,19 km então uma diferença de 580 m . Essa diferença é porque sua calculadora on-line usa matemática simples, assumindo um valor esférico terra, enquanto a Oracle usa o correto elipsoidal forma da Terra (o elipsóide WGS84).

Você pode ver a diferença em https://www.fai.org/page/world -calculadora de distância Se você escolher o WGS84 Earth model (o elipsóide WGS84) então você obtém o mesmo resultado que o Oracle (110.611186562098). Se você alterá-lo para FAI Sphere então você obtém 111.19492643325476, o mesmo que seu comparador.

A distância correta é 110,611 km. Se o cálculo com 580 m de distância é importante depende da sua aplicação. Se você medir distâncias curtas (como um km ou menos), o erro é insignificante. Mas para longa distância pode ser significativo. Aqui significaria perder um alvo por 1/2 km!

Ele mostra a importância de usar o modelo de terra correto para esses cálculos.

EDITAR: E a representação da Oracle (e praticamente todas as ferramentas GIS) é longitude, latitude . Se você trocar os números, obterá resultados muito diferentes.