PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête K-Nearest Neighbor dans PostGIS

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.)