Подсчет количества пересекающихся геометрий

Ответить
cesar
Новоприбывший
Сообщения: 4
Зарегистрирован: 20 окт 2011, 19:12
Репутация: 0

Подсчет количества пересекающихся геометрий

Сообщение cesar » 20 окт 2011, 19:20

Понятно что есть ST_Intersects и можно найти объекты пересекающиеся с заданной геометрией. Также понятно что их можно подсчитать используя COUNT. Но если их много и запросов много то это будет не гуд совсем. Можно ли как то, более эффективно, подсчитать количество пересекающихся геометрий, может как то через индекс не выбирая данные с таблицу COUNT ом?

Аватара пользователя
Aleksandr Dezhin
Активный участник
Сообщения: 244
Зарегистрирован: 03 фев 2010, 10:47
Репутация: 14
Откуда: Москва

Re: Подсчет количества пересекающихся геометрий

Сообщение Aleksandr Dezhin » 20 окт 2011, 19:33

Насколько я понимаю речь о пересечении геометрий в рамках одной таблицы.
Одним запросом можно сделать как-то так:

Код: Выделить всё

SELECT COUNT(*)
FROM tab t1, tab t2
WHERE t1.id > t2.id AND ST_Intersects(t1.geom, t2.geom)
Вместо id можно использовать и oid если они есть в таблице. В общем, смысл сравнения t1.id > t2.id в том, чтобы избежать попадания двух пар (t1, t2) и (t2, t1) а также самопересечений.

GIST-индекс в этом случае работать будет, но только на одном проходе - второй скорее всего будет выполняться через seq scan.

cesar
Новоприбывший
Сообщения: 4
Зарегистрирован: 20 окт 2011, 19:12
Репутация: 0

Re: Подсчет количества пересекающихся геометрий

Сообщение cesar » 21 окт 2011, 10:29

SELECT COUNT(id)
FROM tab t1
WHERE ST_Intersects(t1.geom, POLIGON )

Вот так но если таких запросов много, и если в область попадает много совпадений то то COUNT(*) работает не достаточно быстро.

cesar
Новоприбывший
Сообщения: 4
Зарегистрирован: 20 окт 2011, 19:12
Репутация: 0

Re: Подсчет количества пересекающихся геометрий

Сообщение cesar » 21 окт 2011, 11:45

а по oid быстрее будет? вобще нету но можно организовать.

Аватара пользователя
Aleksandr Dezhin
Активный участник
Сообщения: 244
Зарегистрирован: 03 фев 2010, 10:47
Репутация: 14
Откуда: Москва

Re: Подсчет количества пересекающихся геометрий

Сообщение Aleksandr Dezhin » 21 окт 2011, 11:56

COUNT(*) работает достаточно быстро. А вот ST_Intersects может без индекса довольно сильно тормозить. Индекс то вы создали? Если геометрии с которыми нужно проверить пересечения лежат в отдельной таблице, то опять таки можно одним запросом.

cesar
Новоприбывший
Сообщения: 4
Зарегистрирован: 20 окт 2011, 19:12
Репутация: 0

Re: Подсчет количества пересекающихся геометрий

Сообщение cesar » 21 окт 2011, 12:40

геометрия лежит в общей таблице с кучей полей, знаю что не гуд сейчас провожу на таблицах с минимальным количеством полей, индексы созданы просто если после ST_Intersects надо посчитать COUNT(*) а ST_Intersects выдает по 50 000 совпадений и таких запросов с 10 одновременно то это медленно.
Попробовал COUNT(oid) работает практически одинаково COUNT(id).

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость