Страница 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 (8.97 КБ) 12470 просмотров
P.S. По-хорошему, надо было отсеять ненужные точки прямо из файла (например, с пом. awk/sed)
Далее. Раз точки регулярные, то можно получить растр. Если глянуть на точки, разрешение по широте = 0.5, по долготе = 1.0

- 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 (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 (32.64 КБ) 12468 просмотров
-- Изолинии получились угловатыми и с мелкими линиями, можно сгладить растр (фильтр "скользящим окном") и перестроить изолинии:
Код: Выделить всё
r.neighbors in=wavestmp_select out=wavestmp_select_filter method=average size=3

- wavestmp_filter_contours_0.5.png (32.32 КБ) 12468 просмотров
В архиве ниже область GRASS и шейп-файл изолиний.
Единственный открытый вопрос -- насчёт "замкнутых контуров". Надо получить полигоны между изолиниями, правильно я понимаю? Не очень представляю, для чего это нужно именно в таком виде...
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 (15.83 КБ) 12428 просмотров
Шейп:
Re: Построение изоконтуров
Добавлено: 13 мар 2012, 19:15
jas
Ну вы просто кудесник!
У меня есть предложение как можно получить атрибуты(высоты), правда как это реализовать в GRASS не знаю. Идея - если у каждого полигона есть центроид( только правильный , обязательно должен быть внутри полигона), тогда можно попробовать получить атрибут по гриду (координаты центроида ведь имеются).
С уважением, jas
Re: Построение изоконтуров
Добавлено: 14 мар 2012, 09:50
Александр Мурый
jas писал(а):Идея - если у каждого полигона есть центроид( только правильный , обязательно должен быть внутри полигона), тогда можно попробовать получить атрибут по гриду (координаты центроида ведь имеются).
Примерно так и сделал. В атрибутах есть поле "z", кроме того, сама геометрия в 3D.
Шейп:
Re: Построение изоконтуров
Добавлено: 14 мар 2012, 11:48
jas
Добрый день. А сколько времени занимает весь процесс ?
Не могли бы вы описать, как вам удалось реализовать эту задачу?
C уважением,jas
Re: Построение изоконтуров
Добавлено: 14 мар 2012, 12:39
Александр Мурый
Основное время уходит на метод проб и ошибок. Полностью сейчас, наверное, не распишу, уже сам запутался

Самое "узкое" место -- это создание топологически корректных границ из изолиний и общей границы участка. Без подчистки и затем ручной доводки не получается. GRASS не работает с 3D-топологией, так что приходится делать всё в 2D, а потом снимать высоты с растра.
В ближайшее время распишу общий алгоритм.