Я просматривал «API» функций PostGIS и заметил, что для большинства из них нужно сравнить два элемента. Например, функция ST_Distance берет два элемента геометрии / географии, чтобы найти расстояние.
Нет функции для выполнения чего-то вроде: «Учитывая геометрию G, дайте мне ближайшую геометрию GClosest в таблице T, где G.id <> GClosest.id»
Я понимаю, что мог бы написать функцию PL / PgSQL для итерации по таблице и вызывать ST_Distance для каждого элемента, но я надеюсь, что есть лучшее, более эффективное решение.
postgis
postgresql
Jmoney38
источник
источник
Ответы:
На ваш вопрос также можно ответить одним (хотя и сложным) запросом, подобным следующему, который возвращает всю запись и расстояние до базовой геометрии. Обратите внимание, что если несколько записей соответствуют минимальному расстоянию, все они возвращаются.
Я проверил этот запрос на таблице адресов, и он работает. В запросе выше я ищу ближайшую точку к этому с id = 3.
источник
Джордж МакКеррон написал простую функцию Nearest Neighbor, которая мне показалась весьма полезной. Эта функция возвращает идентификатор ближайшего соседа данной функции:
Пример использования:
... выбирает ближайший узел в таблице nw_node для каждой записи в my_point_table.
Существует также более общая функция на сайте ГИС в Бостоне .
источник