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

Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 00:37
Nik4
Вот такая проблема. Пытаюсь в Erdas 9.1 отредактировать файл высот (формат IMG 15 метров). Задача состоит в следующем, нужно опустить дно озера на несколько метров. В erdas есть инструменты, с помощью которых это можно сделать, Area Fill, Area Offset. Здесь в принципе все работает правильно, но они делают острую грань по контуру береговой линии (обрыв), а контуры берега должны быть заглажены. То есть сетка береговой линии, которая очерчена AOI, должна иметь гладкую фаску (плавный спуск к воде). Есть еще инструмент Interpolate который ближе к решению этой задачи. Тут можно делать мягкий градиент, но этот инструмент работает не по вектору AOI, а работает по точкам, которые имеют радиус сглаживания. А это значит, что ломка сетки получается на 360 градусов вокруг каждой точки. Пробовал построить углубление точками, но береговая линия нарушается. Этот инструмент в данной задаче работает грубо.
Контур береговой линии должен быть совершено четким. Углубление дна должно быть с плавным скосом (закруглением) во внутрь замкнутого вектора AOI.
Собственно это и есть мой вопрос. Возможно ли, это реализовать в Erdas.

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 12:35
Nik4
Может быть эту задачу можно реализовать в какой-то другой программе ?

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 13:05
gamm
Nik4 писал(а):Может быть эту задачу можно реализовать в какой-то другой программе ?
можно, и не в одной, но у вас их вряд ли есть (они из геологии в основном).

Рассказываю, как собрать решение из подручных средств.

1) Рисуем два контура - кромку воды (внутренний), и верхний край брега, где рельеф сохраняется (внешний).
2) Ставим на контурах много точек (с частым шагом). На первом - отметку уреза воды, на втором - снимаем с рельефа.
3) Строим по этим точкам TIN, вставив контура как структурные линии. Можно еще построить дистанционное перобразование от контуров, и интерполировать по линиям тока - но это сложнее.
4) Растеризуем TIN на целевую сетку и впечатываем его по внешнему контуру (внутрь).
5) Если не все слова знакомы, идем учить матчасть (ArcGIS, Surfer, R, C/C++, Fortran - по выбору). Возможно, на сайте ESRI уже есть скрипт, который все это делает.

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 13:12
Александр Мурый
На первый взгляд кажется, что это можно сделать в любой растровой ГИС. Не знаю, как в Erdas, но в GRASS я бы сделал так:
- создать векторный контур дна озера
- перевести его в растр
- сделать из этого растра маску
- сделать копию общего растра и "пересчитать" (resample) его; получится растр, вырезанный по контуру дна озера
- растровым калькулятором "понизить" дно на заданную величину
- вырезать "старое" дно из общего растра (?)
- соединить (r.patch) общий растр "без дна" и растр "нового дна"
- если в конечном растра будут "дыры", заделать их интерполяцией (r.fillnulls)

P.S. С приложенным к посту файлом было бы понятнее..

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 13:15
Александр Мурый
gamm, интересно, а зачем TIN? Если всё равно потом переводить в DEM?

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 15:51
gamm
amuriy писал(а):gamm, интересно, а зачем TIN? Если всё равно потом переводить в DEM?
если вы пробовали интерполировать между изолиниями, то ответ, я думаю, знаете :-)

получается проще и надежнее, и думать не надо.

По уму, конечно, нужно взять изолинию выше озера (иначе получим артефакт с кривизной), и "просадить" рельеф по направлению потока до новой кромки воды. Но для этого нужно построить направления потока, а потом вдоль них раскидать "просадку" - не факт, что это можно сделать даже в Арке.

Можно и проще, сделать дистанционное преобразование от верхней и нижней линий, и все ячейки между ними "просадить" линейной интерполяцией - если верх и низ суть изолинии, то значения на них известны, а расстояния до верха и низа нормируем на сумму=1, вычисляем дельту (на которую просадить), и отнимаем от текущего значения ячейки рельефа. Это вроде а Арке можно сделать (нужен итератор по маске), и выглядит нормально :lol:

P.S. кстати, ваш совет - это вроде то, что товарищъ и делал, и ему не понравилось.

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 16:10
Александр Мурый
если вы пробовали интерполировать между изолиниями

Постоянно этим занят, особых проблем с рельефом не возникает. Видно, здесь вопрос в способах интерполяции.
ваш совет - это вроде то, что товарищъ и делал
Тогда прош.прощ., какгрицца, в Erdas не работаю, не понял мысль..

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 17:15
gamm
amuriy писал(а):
если вы пробовали интерполировать между изолиниями
Постоянно этим занят, особых проблем с рельефом не возникает. Видно, здесь вопрос в способах интерполяции.
а чем работаете?

я просто знаю, что для равнинного рельефа проблемы возникают всегда, и не знаю, кто с этим умеет бороться. То, что встроено в Арку, не есть самый лучший вариант, хотя Хатчинсон поработал славно. В МГУ делали систему MAG, добились определенных успехов. У нас товарищ диссер писал, как восстановить поле направлений (нормалей) из изолиний, поскольку интерполировать нужно именно вдоль них. Но полного успеха я нигде не видел, особенно на равнинах, при большим расстоянием между изолиниями и наличии холмистости. Все равно при построении кривизны хорошо видно, где были изолинии.

Re: Erdas 9.1 файл высот

Добавлено: 28 ноя 2010, 22:26
Александр Мурый
gamm писал(а): а чем работаете?
Оговорюсь: работаю гл. обр. с горными районами, хотя попадаются всякие =)
Модули GRASS r.surf.contour (лин. интерп-я), v.surf.rst ("regularized spline with tension"), r.surf.nnbathy (ос-но хорош "natural neighbor")

P.S. ..чего и топикстартеру советую попробовать.

Re: Erdas 9.1 файл высот

Добавлено: 29 ноя 2010, 05:32
gamm
amuriy писал(а):
gamm писал(а): а чем работаете?
Оговорюсь: работаю гл. обр. с горными районами, хотя попадаются всякие =)
я догадался, потому и написал про равнину :-)
Модули GRASS r.surf.contour (лин. интерп-я), v.surf.rst ("regularized spline with tension"), r.surf.nnbathy (ос-но хорош "natural neighbor")
понятно - я все эти методы (и многие другие) сам писал, для геологов. Кстати, последний метод дает иногда артефакты при переключении носителя (ячеек Вороного, если окрестность первого порядка). Есть глобальные интерполирующие сплайны Ренке (Renke) поверх триангуляции (исходник есть в архиве ACM), это типа TIN, но С2 гладкая поверхность (с непрерывной 2 производной), и позволяет встраивать структурные линии.

Re: Erdas 9.1 файл высот

Добавлено: 30 ноя 2010, 19:58
Nik4
Огромное спасибо за помощь. Правда, сначала все было как-то запутано, без матчасти не обошлось :) , денек пришлось потратить. Зато результат получился блестящий именно то, что нужно было.
Вот еще проблема. На озерах есть острова, которые нужно как-то изолировать от общего контура AOI. Приходится от берега к каждому острову прорубать своеобразную дорожку. Тем самым я делаю из острова, полуостров. А потом в конце технологического процесса эту дорожку просаживаю.
Вопрос. Я подозреваю, что в Erdas можно как-то объединять два замкнутых вектора AOI которые находятся один в другом, чтоб в результате наружный замкнутый вектор имел внутри отверстие в виде (внутреннего меньшего) замкнутого вектора. В учебнике есть описание только как объединять в группу, но группа просаживает сетку файла высот по наружному контуру, и остров тоже исчезает.