Я использую следующий ближайший соседний запрос в PostGIS:
SELECT g1.gid g2.gid FROM points as g1, polygons g2
WHERE g1.gid <> g2.gid
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
LIMIT k;
Теперь, когда я создал индексы в столбце the_geom, а также столбец gid в обеих таблицах, этот запрос занимает гораздо больше времени, чем другие пространственные запросы, связанные с пространственными объединениями, с двумя таблицами.
Есть ли лучший способ найти K-ближайших соседей? Я использую PostGIS.
И еще один запрос, который занимает необычно долгое время, несмотря на создание индексов в столбце геометрии:
select g1.gid , g2.gid from polygons as g1 , polygons as g2
where st_area(g1.the_geom) > st_area(g2.the_geom) ;
Я считаю, что эти запросы не поддерживаются индексами gist, но почему?
В то время как этот запрос:
select a.polyid , sum(length(b.the_geom)) from polygon as a , roads as b
where st_intersects(a.the_geom , b.the_geom);
возвращает результат через некоторое время, несмотря на включение таблицы "дорог", которая намного больше, чем многоугольники или таблицы точек, а также включает более сложные пространственные операторы.