Я пытаюсь решить проблему поиска n ближайших соседей с помощью PostGIS:
Начальная точка:
Проблема: Найдите n (например, 5) ближайших соседей для данной точки в таблице geoname, представленной идентификатором (geoname.geonameid.
Возможное решение:
На основе http://www.bostongis.com/PrinterFriendly.aspx ? content_name = postgis_nearest_neighbor , я попробовал следующий запрос:
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid " +
"AND ST_DWithin(start.geom, ende.geom, 300) order by distance limit 5"
Время обработки: около 60 секунд
Также попробовал подход, основанный на EXPAND:
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid AND expand(start.geom, 300) && ende.geom " +
"order by distance limit 5"
Время обработки: около 120 секунд
Предполагаемое приложение - это какое-то автозаполнения. Таким образом, любой подход, занимающий более> 1 с, неприменим. Можно ли в целом добиться времени отклика