Tengo una tabla que contiene miles de puntos de datos en los alrededores de Londres.
Estoy tratando de escribir una consulta para encontrar el más cercano de puntos de datos a una determinada latitud y longitud.
Estoy obteniendo diferentes resultados en función de si puedo realizar el pedido por la <->
de la distancia del operador o el resultado de ST_DistanceSphere
. Aquí están las dos consultas y sus resultados:
Order By <->
------------
SELECT
uid,
ST_DistanceSphere(
ST_PointFromText('POINT(-0.186243362115208 51.5128590051459)', 4326),
the_geom
) as d
FROM points
ORDER BY the_geom <-> ST_SetSRID(ST_Point(-0.186243362115208, 51.5128590051459), 4326) LIMIT 5;
Resultados:
uid | st_astext | d
---------+----------------------------+---------------
6997685 | POINT(-0.186723 51.500052) | 1424.46281677
6997684 | POINT(-0.187011 51.500056) | 1424.62219563
6997686 | POINT(-0.186435 51.500047) | 1424.69367394
6997683 | POINT(-0.187299 51.500061) | 1424.94947768
6997687 | POINT(-0.186147 51.500043) | 1425.09232
Order By ST_DistanceSphere
--------------------------
SELECT
uid,
ST_DistanceSphere(
ST_PointFromText('POINT(-0.186243362115208 51.5128590051459)', 4326),
the_geom
) as d
FROM points
ORDER BY d LIMIT 5;
Resultados:
uid | st_astext | d
---------+----------------------------+---------------
6997686 | POINT(-0.186435 51.500047) | 1424.69367394
6997685 | POINT(-0.186723 51.500052) | 1424.46281677
6997687 | POINT(-0.186147 51.500043) | 1425.09232
6997688 | POINT(-0.185859 51.500039) | 1425.76968591
6997684 | POINT(-0.187011 51.500056) | 1424.62219563
Como se puede ver, la primera consulta devuelve 6997683
en los resultados, pero la segunda consulta no (y vuelve 6997688
lugar). 6997683
es el más cercano el valor de los dos, 6997688
no debe ser devuelto por la consulta.
El tipo de the_geom
es ST_Point
y el SRID (marcada con Find_SRID
) 4326
.
¿Cuál podría ser la causa de la diferencia, y lo que estoy haciendo mal?