Desde finales de septiembre de 2011, PostGIS admite consultas de vecinos más cercanos indexadas a través de operadores especiales que se pueden utilizar en la cláusula ORDER BY:
SELECT name, gid
FROM geonames
ORDER BY geom <-> st_setsrid(st_makepoint(-90,40),4326)
LIMIT 10;
...devolverá los 10 objetos cuyas geom
es el -90,40
más cercano de forma escalable. En esa publicación del anuncio hay algunos detalles más (opciones y advertencias) y el uso de los operadores <-> y <#> ahora también está documentado en la referencia oficial de PostGIS 2.0. (La principal diferencia entre los dos es que <->
compara los centroides de forma y <#>
compara sus límites:no hay diferencia para los puntos, otras formas eligen lo que es apropiado para sus consultas).