В PostGIS, как я нахожу все точки в полигоне?

alias -- ddt='ls -trFld'
dt () { ddt --color "$@" | tail -n 30; }

Дает Вам новые файлы в текущем каталоге. Я использую все это время...

17
задан Alexandre Neto 3 November 2015 в 16:33
поделиться

2 ответа

В PostGIS вы можете использовать оператор ограничивающего прямоугольника для поиска кандидатов, что очень эффективно, поскольку он использует индексы GiST. Затем, если требуются строгие совпадения, используйте оператор contains.

Что-то вроде

SELECT 
     points,neighborhood_name from points_table,neighborhood 
WHERE 
     neighborhood_poly && points /* Uses GiST index with the polygon's bounding box */
AND 
    ST_Contains(neighborhood_poly,points); /* Uses exact matching */

О том, если это необходимо, зависит от ваших требований. Для того, чтобы все вышеперечисленное работало, вам обязательно должны быть установлены PostGIS и GEOS. Но если сопоставления ограничивающего прямоугольника достаточно, вы можете просто закодировать его на SQL, не нуждаясь в PostGIS.

Если требуются точные совпадения, содержащиеся алгоритмы общедоступны, но для их эффективной реализации требуются некоторые усилия по их реализации в библиотеке, которая могла бы затем вызывается из SQL (как GEOS).

12
ответ дан 30 November 2019 в 14:00
поделиться

Я считаю, что ST_Contains автоматически переписывает запрос, чтобы использовать ограничивающую рамку, индексированную GiST, как отмечается:

"Этот вызов функции будет автоматически включить сравнение ограничивающего прямоугольника, будут использовать любые индексы, которые доступны по геометрии. Избегать использование индекса, используйте функцию _ST_Contains. "

http://postgis.refractions.net/docs/ST_Contains.html

4
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: