Przeglądałem „API” funkcji PostGIS i zauważam, że większość z nich wymaga porównania dwóch elementów. Na przykład funkcja ST_Distance potrzebuje dwóch elementów geometrii / geografii, aby znaleźć odległość.
Nie ma funkcji, aby wykonać coś takiego: „Biorąc pod uwagę geometrię G, podaj mi najbliższą geometrię GClosest w tabeli T, gdzie G.id <> GClosest.id”
Zdaję sobie sprawę, że mógłbym napisać funkcję PL / PgSQL do iteracji po stole i wywoływać ST_Distance na każdym elemencie, ale mam nadzieję, że istnieje lepsze, bardziej wydajne rozwiązanie.
postgis
postgresql
Jmoney38
źródło
źródło
Odpowiedzi:
Na twoje pytanie można również odpowiedzieć jednym (choć złożonym) zapytaniem, takim jak poniższe, które zwraca cały rekord i odległość do geometrii odniesienia. Należy pamiętać, że jeśli więcej niż jeden rekord odpowiada minimalnej odległości, wszystkie są zwracane.
Przetestowałem to zapytanie na tabeli adresów i działa. W powyższym zapytaniu szukam najbliższego punktu z id = 3.
źródło
George MacKerron napisał prostą funkcję Neighbor Neighbor, którą uważam za całkiem przydatną. Ta funkcja zwraca identyfikator najbliższego sąsiada do danej funkcji:
Przykład użycia:
... wybiera najbliższy węzeł w tabeli nw_node dla każdego wpisu w mojej tabeli_punktowej.
Istnieje również bardziej ogólna funkcja na stronie GIS w Bostonie .
źródło