Vendo um valor diferente com <@>
eearth_distance
with points as (
select
'(1,1)'::point as p1
,'(2,2)'::point as p2
)
select
((p1 <@> p2) * 1609.34::double precision) as d1
,(earth_distance(ll_to_earth(p1[1], p1[0]), ll_to_earth(p2[1], p2[0]))) as d2
from points
Resultado é:
157224.717583288 157402.326073052
Quase 200m de diferença - por que isso?
Eles fazem coisas diferentes,
earth_distance
Retorna a distância do grande círculo entre dois pontos na superfície da Terra.<@>
Dá a distância em milhas terrestres entre dois pontos na superfície da Terra.Portanto, esta é a diferença entre a média dos dois (supondo que nenhum deles esteja correto) é dado como,
Que é 0,11%. Pela distância do Grande Círculo na wikipedia
Então, qual é mais preciso?
<@>
, claramente. Mas, podemos fazer melhor, como dizem os documentos,Mas se seus coordenadores são SRID 4326, a distância mais correta é
156876.14940189
.