Ich habe mir die PostGIS "API" von Funktionen angesehen und festgestellt, dass die meisten von ihnen zwei Elemente zum Vergleichen benötigen. Beispielsweise benötigt die Funktion ST_Distance zwei Geometrie- / Geografieelemente, um die Entfernung zu ermitteln.
Es gibt keine Funktion, um etwas zu tun wie: "Gib mir bei gegebener Geometrie G die nächstgelegene Geometrie GClosest in Tabelle T, wobei G.id <> GClosest.id"
Mir ist klar, dass ich eine PL / PgSQL-Funktion schreiben könnte, um die Tabelle zu durchlaufen und ST_Distance für jedes Element aufzurufen, aber ich hoffe, dass es eine bessere, effizientere Lösung gibt.
postgis
postgresql
Jmoney38
quelle
quelle
Antworten:
Ihre Frage kann auch durch eine einzelne (wenn auch komplexe) Abfrage wie die folgende beantwortet werden, die den gesamten Datensatz und den Abstand zur Referenzgeometrie zurückgibt. Bitte beachten Sie, dass alle Datensätze zurückgegeben werden, wenn mehr als ein Datensatz mit der Mindestentfernung übereinstimmt .
Ich habe diese Abfrage auf Adressentabelle getestet und es funktioniert. In der obigen Abfrage suche ich den nächstgelegenen Punkt mit id = 3.
quelle
George MacKerron hat eine einfache Nearest Neighbor-Funktion geschrieben, die ich sehr nützlich fand. Diese Funktion gibt die ID des nächsten Nachbarn für ein bestimmtes Feature zurück:
Anwendungsbeispiel:
... wählt für jeden Eintrag in my_point_table den nächsten Knoten in der Tabelle nw_node aus.
Es gibt auch eine allgemeinere Funktion auf der Boston GIS-Site .
quelle