Выбор векторных объектов, пересекающихся с растром

Ответить
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Выбор векторных объектов, пересекающихся с растром

Сообщение KolesovDmitry » 01 окт 2013, 18:47

Представим, что есть две карты, одна векторная, а вторая растровая. Растровая карта содержит некоторое количество ненулевых ячеек. Требуется выбрать все объекты из векторной карты, которые хотя бы частично перекрываются с ненулевыми ячейками растра.

Если задачу легче понять на примере, то можно представить, что есть векторная карта домов (buildings) и растровая карта участков подтопления (cells). Требуется найти идентификаторы домов, которые подвергаются риску. Пример приведен на рисунке:
Example.png
Пример двух карт
Example.png (90.86 КБ) 5053 просмотра
Возник вопрос, как выбрать векторные объекты, пересекающиеся с растровыми участками. Какой-то специальной команды я не нашел, разве что v.rast.stat, но это скорее из пушки по воробьям, хочется чего-то более легкого в вычислительном плане.

Пока придумал такую процедуру

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

v.to.rast in=buildings out=buildings use=cat # Сохраняем идентификаторы домов в виде растра
r.mask rast=cells # Все нулевые ячейки маскируются
r.stats -n buildings # Получаю список идентификатров (все, что не пересекается с cells маскируется)
но что-то мне такой подход кажется кривым.

Может ли кто-то посоветовать другие варианты?

Аватара пользователя
Пётр Дубоделов
Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

Re: Выбор векторных объектов, пересекающихся с растром

Сообщение Пётр Дубоделов » 01 окт 2013, 20:19

зональная статистика, как ни крути. есть обратная идея: хранить данные по затоплению не растром, а векторными точками (пары координат закрашенных пикселей), а проблемные "строения" выбирать запросом по пересечению. или даже не точками, а полигонами? - тогда точно не промахнуться с шагом. может даже все держать в базе данных, вдруг быстрее работать будет... но не силён в матчасти бд.
Дальний Восток покоя не даёт?))
"Если карта не соответствует местности, доверяй местности."

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Выбор векторных объектов, пересекающихся с растром

Сообщение KolesovDmitry » 02 окт 2013, 15:46

Пётр Дубоделов писал(а):есть обратная идея: хранить данные по затоплению не растром, а векторными точками (пары координат закрашенных пикселей), а проблемные "строения" выбирать запросом по пересечению. или даже не точками, а полигонами?
Дело в том, что исходные данные в приходят растровом виде, не уверен, что построение векторного слоя с растра даст выигрыш в скорости (зато в любом случае добавит прозрачности действиям). Хотя, конечно, нужно провести эксперимент, а не утверждать голословно. Попробую, по результатам отпишусь.
Пётр Дубоделов писал(а):Дальний Восток покоя не даёт?))
Нет, я это привел пример для наглядности, на самом деле физическая природа растра совем другая и ее долго объяснять было.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Выбор векторных объектов, пересекающихся с растром

Сообщение Александр Мурый » 03 окт 2013, 14:58

- Сделать пересечение двух растров с помощью r.mapcalc и глянуть категории выходного растра:

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

r.mapcalc 'cross = if(cells,buildings)'
r.category cross
ИЛИ

- Посчитать "зональную" статистику одного растра по другому и отфильтровать вывод:

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

r.univar -t map=cells zones=buildings | cut -f1 -d'|' | sed -n '1!p'
Редактор материалов, модератор форума

Ответить

Вернуться в «GRASS»

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

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