Seit Ende September 2011 unterstützt PostGIS indexierte Nächste-Nachbar-Abfragen über einen oder mehrere spezielle Operatoren, die in der ORDER BY-Klausel verwendet werden können:
SELECT name, gid
FROM geonames
ORDER BY geom <-> st_setsrid(st_makepoint(-90,40),4326)
LIMIT 10;
...gibt die 10 Objekte zurück, deren geom
ist am nächsten -90,40
auf skalierbare Weise. Ein paar weitere Details (Optionen und Vorbehalte) sind in diesem Ankündigungspost und die Verwendung der Operatoren <-> und <#> ist jetzt auch in der offiziellen PostGIS 2.0-Referenz dokumentiert. (Der Hauptunterschied zwischen den beiden besteht darin, dass <->
vergleicht die Formschwerpunkte und <#>
vergleicht ihre Grenzen – kein Unterschied für Punkte, andere Formen wählen, was für Ihre Abfragen geeignet ist.)