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

Построение изоконтуров

Добавлено: 12 мар 2012, 10:11
jas
Добрый день!
Подскажите пожалуйста , можно ли c использованием GRASS построить изоконтура c учетом барьеров?
Входные данные текстовый файл X,Y,Z (Регулярная сетка) , незначащие данные помечены значением 9999.
Требуется построить замкнутые изолинии (изоконтура) с учетом барьеров(значение - 9999) и получить на выходе Shape-файл (полигоны) с атрибутом Z.
Спасибо.images/icons/smile/alert.gif

Re: Построение изоконтуров

Добавлено: 12 мар 2012, 12:13
Александр Мурый
Если кратко, то НЕТ. Интерполяция "с барьерами" в GRASS отсутствует. Может, можно как-то извернуться -- надо смотреть на данные..
Не понял: вы хотите сделать TIN или изолинии? А как выглядят "барьеры"? Это отдельный набор линий?

Re: Построение изоконтуров

Добавлено: 12 мар 2012, 18:21
jas
Добрый вечер!
Мне необходимо построить замкнутые изолинии. Барьеры уже представлены в матрице(текстовый файл XYZ) значениями 9999. Задача- построить замкнутые изолинии, чтобы при этом в процессе построения значения 9999 игнорировались.

Re: Построение изоконтуров

Добавлено: 12 мар 2012, 18:32
jas
Еще раз добрый вечер.
А существует возможность построить по входным данным(XYZ) TIN и получить замкнутые контура с последующим сохранением результата в Шейп-файл?

Re: Построение изоконтуров

Добавлено: 12 мар 2012, 20:48
Александр Мурый
jas писал(а):А существует возможность построить по входным данным(XYZ) TIN и получить замкнутые контура с последующим сохранением результата в Шейп-файл?
-- импорт XYZ из текстового файла: v.in.ascii
-- триангуляция Делоне: v.delaunay
-- экспорт в shape-файл: v.out.ogr

Изолинии в GRASS строятся только по растрам (r.contour), так что можно попробовать интерполяцию по точкам в растр, а потом сделать изолинии с нужным шагом.

Будут вопросы -- задавайте :)

Да: было бы неплохо, если бы вы выложили кусок данных.

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 09:09
jas
Добрый день , спасибо за ответ.В прикреплении файл данных(XYZ).
С уважением,
jas

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 14:21
Александр Мурый
Покопался.

-- импортировал все точки в область WGS84 Lat/Long;
-- создал атрибут. таблицу, внёс туда значения Z;
-- вытащил все значимые (у которых Z не равно 9999) точки в отдельную вект. карту;

Получилось (синие точки -- значимые):
wavestmp_pts.png
wavestmp_pts.png (8.97 КБ) 12470 просмотров


P.S. По-хорошему, надо было отсеять ненужные точки прямо из файла (например, с пом. awk/sed)

Далее. Раз точки регулярные, то можно получить растр. Если глянуть на точки, разрешение по широте = 0.5, по долготе = 1.0
wavestmp_pts_zoom.png
wavestmp_pts_zoom.png (1.92 КБ) 12470 просмотров
-- Выставляем нужное разрешение:

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

g.region vect=wavestmp_select nsres=0.5 ewres=1 -p
-- Перегоняем точки в растр:

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

v.to.rast in=wavestmp_select out=wavestmp_select use=z
wavestmp_rast.png
wavestmp_rast.png (17.95 КБ) 12470 просмотров
Продолжение в след. сообщении.

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 14:40
Александр Мурый
Далее.

-- Создаём изолинии (например, с шагом 0.5):

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

r.contour in=wavestmp_select out=wavestmp_select_cont_i05 step=0.5

wavestmp_contours_0.5.png
wavestmp_contours_0.5.png (32.64 КБ) 12468 просмотров
-- Изолинии получились угловатыми и с мелкими линиями, можно сгладить растр (фильтр "скользящим окном") и перестроить изолинии:

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

r.neighbors in=wavestmp_select out=wavestmp_select_filter method=average size=3
wavestmp_filter_contours_0.5.png
wavestmp_filter_contours_0.5.png (32.32 КБ) 12468 просмотров
В архиве ниже область GRASS и шейп-файл изолиний.
wavestmp.7z
(421.36 КБ) 481 скачивание
Единственный открытый вопрос -- насчёт "замкнутых контуров". Надо получить полигоны между изолиниями, правильно я понимаю? Не очень представляю, для чего это нужно именно в таком виде...

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 15:05
jas
Спасибо большое, сразу чувствуется рука мастера! Я, к сожалению, только начинаю знакомиться с GRASS.
Изолинии получились красивые, но мне , опять же к сожалению, необходимо получить именно полигоны между изолиниями. В ArcGis в модуле TIN такая возможность существует, но этого модуля у меня нет.
С уважением,
jas posting.php?mode=reply&f=29&t=10018#

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 15:13
Александр Мурый
На здоровье :) В GRASS действует принцип "think raster", поэтому с TIN туговато..
Попробую "залить" полигоны между изолиниями, это интересно.

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 18:41
Александр Мурый
Замкнутые контуры получились, но они пока без высот (в атрибутах высот тоже нет).
cont_i05_areas_cut.png
cont_i05_areas_cut.png (15.83 КБ) 12428 просмотров
Шейп:
cont_i05_areas_cut.zip
(55.26 КБ) 470 скачиваний

Re: Построение изоконтуров

Добавлено: 13 мар 2012, 19:15
jas
Ну вы просто кудесник!
У меня есть предложение как можно получить атрибуты(высоты), правда как это реализовать в GRASS не знаю. Идея - если у каждого полигона есть центроид( только правильный , обязательно должен быть внутри полигона), тогда можно попробовать получить атрибут по гриду (координаты центроида ведь имеются).
С уважением, jas

Re: Построение изоконтуров

Добавлено: 14 мар 2012, 09:50
Александр Мурый
jas писал(а):Идея - если у каждого полигона есть центроид( только правильный , обязательно должен быть внутри полигона), тогда можно попробовать получить атрибут по гриду (координаты центроида ведь имеются).
Примерно так и сделал. В атрибутах есть поле "z", кроме того, сама геометрия в 3D.

Шейп:
cont_i05_areas_3d.zip
(77.51 КБ) 546 скачиваний

Re: Построение изоконтуров

Добавлено: 14 мар 2012, 11:48
jas
Добрый день. А сколько времени занимает весь процесс ?
Не могли бы вы описать, как вам удалось реализовать эту задачу?
C уважением,jas

Re: Построение изоконтуров

Добавлено: 14 мар 2012, 12:39
Александр Мурый
Основное время уходит на метод проб и ошибок. Полностью сейчас, наверное, не распишу, уже сам запутался :)
Самое "узкое" место -- это создание топологически корректных границ из изолиний и общей границы участка. Без подчистки и затем ручной доводки не получается. GRASS не работает с 3D-топологией, так что приходится делать всё в 2D, а потом снимать высоты с растра.

В ближайшее время распишу общий алгоритм.