Depuis fin septembre 2011, PostGIS prend en charge les requêtes indexées du plus proche voisin via un ou plusieurs opérateurs spéciaux utilisables dans la clause ORDER BY :
SELECT name, gid
FROM geonames
ORDER BY geom <-> st_setsrid(st_makepoint(-90,40),4326)
LIMIT 10;
...retournera les 10 objets dont geom
est -90,40
le plus proche de manière évolutive. Quelques détails supplémentaires (options et mises en garde) figurent dans cette publication d'annonce et l'utilisation des opérateurs <-> et <#> est également désormais documentée dans la référence officielle de PostGIS 2.0. (La principale différence entre les deux est que <->
compare les centroïdes de la forme et <#>
compare leurs limites : aucune différence pour les points, d'autres formes choisissent ce qui convient à vos requêtes.)