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

Отмывка границ

Добавлено: 25 июн 2012, 12:11
rhot
Кто знает какие способы, приёмы, инструменты отмывки границ полигона в свободных ГИС?

Re: Отмывка границ

Добавлено: 25 июн 2012, 12:23
Александр Мурый
Навскидку:
-- "отмывка" границ полигонов в QGIS;
-- в GRASS можно поиграться с буферными зонами полигонов и их раскраской -- может, что-то и выйдет..

Re: Отмывка границ

Добавлено: 25 июн 2012, 12:28
rhot
1) обычно так и делаю, создаю искусственный градиент из линий в символике.
2) а вот в GRASS, наверное, выйдет дольше чем в QGIS...

Re: Отмывка границ

Добавлено: 25 июн 2012, 15:24
KolesovDmitry
Если отмывка нужна чисто для оформительких целей, то в GRASS можно создать растр на основе границы полигона, и размывать его в скользящем окне сколько душе угодно.

Re: Отмывка границ

Добавлено: 25 июн 2012, 16:14
rhot
KolesovDmitry, спасибо большое!

Re: Отмывка границ

Добавлено: 25 июн 2012, 16:37
Александр Мурый
* rhot
А можно увидеть пример, если получилось? И кратко, как именно? :)

Re: Отмывка границ

Добавлено: 25 июн 2012, 21:14
rhot
Делал в QGIS
Источник вдохновения: http://www.aubreyrhea.net/gis/index.php ... -prettier/ (3. Coastal Vignette).

С помощью GRASS не разобрался ещё как делать, но идея понравилась, буду пробовать. :)

Re: Отмывка границ

Добавлено: 25 июн 2012, 23:05
Александр Мурый
Попробовал поиграться в GRASS:
polygon_shade_GRASS.png
polygon_shade_GRASS.png (7.58 КБ) 10113 просмотров
"Алгоритм" этого безобразия:
-- полигоны в линии (v.type);
-- линии в растр (v.to.rast);
-- множественные буферные зоны для растра (r.buffer), например, через 5,10,20 метров;
-- задаём нужные цвета растровым буферным зонам, т.о. создаём эффект градиента (r.colors);
-- выводим на экран сначала одни полигоны без границ, затем накладываем растр с буферами (d.rast -o), затем отдельно границы полигонов нужным цветом.

Сюда добавить бы немного "размытости" растра по краям, гауссово размытие, что ли.. (?) Пробовал фильтры (r.neighbors, r.mfilter), но не удалось размыть как в гимпе или инкскейпе:)

Re: Отмывка границ

Добавлено: 26 июн 2012, 04:55
rhot
amuriy писал(а): Сюда добавить бы немного "размытости" растра по краям, гауссово размытие, что ли.. (?) Пробовал фильтры (r.neighbors, r.mfilter), но не удалось размыть как в гимпе или инкскейпе:)
вот-вот... основной загадкой для меня остаётся =>
KolesovDmitry писал(а):размывать его в скользящем окне сколько душе угодно.
Смысл понимаю, а реализовать как нужно не могу :(

Re: Отмывка границ

Добавлено: 26 июн 2012, 08:25
KolesovDmitry
Как я делал ):
0) Настраиваю регион под задачу (работаем с растрами -- нужно заботиться о величине ячейки).
1) Полигоны в линии (v.type).
2) Линии в растр (v.to.rast).
3) Увеличиваю толшину линии (r.grow).
4) Нулевые (null) ячейки преобразую в математические нули (0) (r.null).
5) Размываю скользящим средним (r.neighbors).
6) Для более красивого результата прогоняю размытие (п. 5) в цикле.
7) Для удобства восприятия (0=черный, 1=белый) настраиваю цвета (r.mapcalc, r.colors).

В предположении, что на выходе из п. 2 получается растр tmp, можно написать такой скриптик:

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

# g.region res=25

# Подготовительный этап
r.grow in=tmp out=tmp5 r=5
r.null tmp5 null=0
r.mapcalc "tmp5=1.0*tmp5"
r.neighbors in=tmp5 out=bounds.tmp

# Размытие
for i in `seq 15` 
do 
   r.neighbors in=bounds.tmp out=bounds.tmp --o
done

g.region res=5 # "тонкая настройка"
for i in `seq 15` 
do 
   r.neighbors in=bounds.tmp out=bounds.tmp --o
done

# Цвета
r.mapcalc "bounds.tmp= 1 - bounds.tmp"
r.colors bounds.tmp col=grey
Результат при крупномасштабном просмотре:
big.png
Пример в крупном масштабе
big.png (47.45 КБ) 10095 просмотров
Результат при мелкомасштабном просмотре:
small.png
Мелкий масштаб
small.png (75.51 КБ) 10095 просмотров

Re: Отмывка границ

Добавлено: 26 июн 2012, 08:32
rhot
Кстати, способ, который я привёл выше, естественно не работает, если границу хочется сделать вокруг изображения в растре. Надо экспериментировать с GRASS...