Страница 1 из 1

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

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

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

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

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

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

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

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

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

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

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

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'