Как построить сетку рельефа без резких переходов в районе из

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 03 дек 2008, 18:15

Всем добрый день!

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

Соответственно, мне нужно построить сетку рельефа (grid) для соответствующих рассчетов.

У меня есть цифровые карты, которые содержат изолинии.

Пытался строить по ним модель рельефа по двум алгоритмам:
- Inverse distance weighted (аппроксимация по обратному средневзвешенному растоянию)
- через модель треугольников.

Оба алгоритма имеют критический недостаток: рельеф, построенный по ним - очень негладкий (идет очень большими ступеньками по 20 метров высотой - такие перепады высот в изолиниях). Кроме того, во всех холмах и горах получаются срезанные вершины в тех случаях, когда высоты не обозначены точками.
Кроме того, в алгоритме Inverse Distance Weighted (я шел по точкам изолиний) мы получаем локальные экстремумы (минимумы или максимумы) возле ключевых точек изолиний. Эти экстремумы также очень сильно мешают видимости и проходимости.
На скриншотах проиллюстрированы эти недостатки:
Изображение (исходные изолинии)
Изображение(модель треугольников, построенная в ArcInfo)
Изображение
(матрица рельефа (grid), построенная алгоритмом IDW в моем самописном приложении. Чем светлее - тем выше. Здесь видны резкие переходы аналогично модели треугольников, а на реальной местности эти переходы плавные)

Таким образом, по такой модели рельефа:
- техника не может пересекать изолинии, так как каждая изолиния в модели - это 20-метровый обрыв, хоть на самом деле местность очень гладкая и легко проходимая.
- с видимостью тоже плохо, так как если техника стоит далеко от изолинии в сторону спуска, то возникает эффект плато: человек, который находится далеко от края плато, не видит объектов, которые находятся под плато. При этом реально с этой техники должно быть видно всех, так как она находится на вершине холма! Аналогичная ситуация, когда техника находится под изолинией, и не видит при такой модели рельефа технику, которая над изолинией.


Внимание, вопрос! Как мне построить более плавный, но достаточно точный рельеф?

Есть ли алгоритмы для более сглаженной аппроксимации (но без сильной потери точности)?

Аватара пользователя
Игорь
Интересующийся
Сообщения: 33
Зарегистрирован: 19 ноя 2008, 12:25
Репутация: 6

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Игорь » 03 дек 2008, 23:18

Мне кажется в данной ситуации лучше воспользоваться обработкой SRTM
http://gis-lab.info/qa/srtm.html
результат будет точнее

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8906
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Максим Дубинин » 04 дек 2008, 04:10

попробуйте кригинг, IDW с другими параметрами, более высокое разрешение выходного растра и т.п.
пристегивайтесь, турбулентность прямо по курсу

Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 04 дек 2008, 17:39

Игорь писал(а):Мне кажется в данной ситуации лучше воспользоваться обработкой SRTM
http://gis-lab.info/qa/srtm.html
результат будет точнее
Ну... Как сказать... Ведь замеры SRTM идут примерно каждые 90 метров, а это очень редко для того, чтобы можно было построить модель, которая учитывает резкие перепады высот или мелкие объекты (например, небольшие по площади холмы). Мне нужно построить рельеф с точностью до 5 метров... Поэтому данных SRTM мне недостаточно...

Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 04 дек 2008, 17:47

sim писал(а):попробуйте кригинг, IDW с другими параметрами, более высокое разрешение выходного растра и т.п.
Кригинг пробовал. В ArcMap со всеми параметрами по умолчанию. Вот результат:
Изображение
В принципе, криггинг лучше справился с моделью рельефа...
При этом, как видите, все равно есть резкие переходы, хоть они и не так критичны, как в IDW. Также в криггинге Вы можете заметить, что также вокруг точек изолиний есть локальные экстремумы. А самое главное - что вершины гор тоже все как ножом срезанные по самой верхней изолинии. Поэтому криггинг - лучше, спасибо, но все равно не подходит.

Другие параметры в IDW тоже пробовал. Перебрал почти все параметры, которые могут быть :) Результат безуспешный - приниципальной разницы нет.

Разрешение выходного растра у меня и так огромное. вот на том рисунке, что я Вам показал, она составляет более 4000х4000 точек.

Пробовал еще в ArcMap сплайновую интерполяцию в растер - ничего не получилось, выдает ошибку "Error in executing grid expression".

Неужели нет алгоритмов, которые позволят построить рельеф красиво???? :shock:

gis
Гуру
Сообщения: 515
Зарегистрирован: 24 янв 2007, 15:46
Репутация: 16
Откуда: Липецк
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение gis » 04 дек 2008, 19:49

А Вы не пробовали напрямую создать TIN из горизонталей?

Можно для точности туда еще добавить отметки высот, чтобы те же вершины не резались.

Пришлось как-то подобное делать - использовал именно прямое построение TIN, правда там не стояла задача рассчитывать маршруты.

Интерполировать горизонтали, насколько понимаю, не совсем верно. Горизонтали сами по себе интерполяция.

Кстати, посмотрите на аркскрипт, есть какие-то расширения которые выверяют ЦМР. Это всякие гидрологические расширения. Да и на форуме Даты+ можно поспрашивать.

Напишите потом результат - интересно что получилось у Вас в итоге.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 5
Откуда: москва
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение geologic » 05 дек 2008, 14:55

У вас некорректные исходные данные. Для хорошей модели обязательно нужны еще и точки и скелетные линии (тальвеги, бровки). Но даже имея все это, придется повозиться - в ГИС алгоритмы создания моделей упрощенные, местами откровенно кривые. Приличный рельеф средствами ESRI получается либо ручной лепкой, либо через специальный модуль topo2raster. Однако, как я уже упомянул, выпучить плоские вершины и углубить долины модуль вам не поможет - это вручную, наверное. Почитайте статьи по DTM/3D на этом форуме. Есть и другой накопленный опыт, статьи, собрано в виде коллекции вот тут.

Крайгинг, кстати, как и сплайн-методы при построении рельефа не применяются, это для подземных построений и полей, под конкретную гипотезу распределения.

Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 05 дек 2008, 15:58

gis писал(а):А Вы не пробовали напрямую создать TIN из горизонталей?
Пробовал. Та модель TIN, которую Вы видите на скриншоте выше - это модель TIN, созданная в ArcMap из горизонталей. Как видите, она содержит много резких ступенек, хотя рельеф этой местности почти равнинный. И режутся, что самое ужасное, не только вершины, но и просто большие расстояния между изолиниями.
gis писал(а):Можно для точности туда еще добавить отметки высот, чтобы те же вершины не резались.
Мне нужно написать такую программу, чтобы пользователь (который не разбирается в GIS) выбрал цифровую карту, а программа автоматически построила модель рельефа. Поэтому отметки высот если и добавлять, то это нужно делать автоматически. Есть ли алгоритмы добавления отметок высот?
gis писал(а):Интерполировать горизонтали, насколько понимаю, не совсем верно. Горизонтали сами по себе интерполяция.
Не знаю, какой термин правильно употребить. Мне нужно преобразовать изолинии в сетку рельефа с плавными переходами.
gis писал(а):Кстати, посмотрите на аркскрипт, есть какие-то расширения которые выверяют ЦМР. Это всякие гидрологические расширения. Да и на форуме Даты+ можно поспрашивать.
А кто-нибудь здесь знает название этих расширений?
gis писал(а):Напишите потом результат - интересно что получилось у Вас в итоге.
Оки!

Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 05 дек 2008, 16:13

geologic писал(а):У вас некорректные исходные данные. Для хорошей модели обязательно нужны еще и точки и скелетные линии (тальвеги, бровки). Но даже имея все это, придется повозиться - в ГИС алгоритмы создания моделей упрощенные, местами откровенно кривые.
Другими словами, Вы хотите сказать, что задача автоматизированного построения нормальной сглаженной модели рельефа (без ручной правки цифровой карты) так в мире до сих пор и не решена???

Правильно ли я тогда понимаю, что невозможно написать приложение, в котором:
1) пользователь (понятия не имеющий, что такое GIS), указывает цифровую карту
2) приложение для любой выбранной цифровой карты строит сетку рельефа с гладкими переходами. Такую, чтобы по ней можно было оценить реальную видимость и проходимость. В перспективе нужно также строить 3D-модель такой местности.

Что, такое приложение написать на данном этапе невозможно??

geologic писал(а):Приличный рельеф средствами ESRI получается либо ручной лепкой, либо через специальный модуль topo2raster.
Спасибо, посмотрю...
А знаете ли Вы или кто-нибудь готовые алгоритмы качественного построения рельефа? Можете ими поделиться? У меня есть смутное предчувствие, что какие-нить светлые умы успешно поработали над этой задачкой...
geologic писал(а):Однако, как я уже упомянул, выпучить плоские вершины и углубить долины модуль вам не поможет - это вручную, наверное.
А разве нет алгоритмов, которые могут автоматизировать? Например, если задать алгоритму, через сколько вертикальных метров строятся изолинии, то алгоритм может найти вершины и долины, и по центру их поставить точку с высотой, соответствующей площади вершины/долины.

geologic писал(а):Почитайте статьи по DTM/3D на этом форуме. Есть и другой накопленный опыт, статьи, собрано в виде коллекции вот тут.
Спасибо, почитаю!

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 5
Откуда: москва
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение geologic » 05 дек 2008, 17:50

Прежде чем говорить о автоматических алгоритмах и тем более средствах построения, Вы все-таки почитайте сначала, как это делается вручную. Конечно, можно взять некие данные и сделать модель... Вопрос ведь, какие данные и какая модель. В принципе, вы уже это проделали и кое-что поняли. Наверно, чисто для одних горизонталей можно подобрать алгоритм, вы ведь какие-то библиотеки уже искали...

Из средств ГИС topo2raster тоже ничего, ну и подход, в 3D analyst.

Barvetal
Интересующийся
Сообщения: 41
Зарегистрирован: 28 авг 2008, 18:19
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Barvetal » 05 дек 2008, 17:54

geologic писал(а):ну и подход, в 3D analyst.
Не понял. Что за подход в 3D analyst? Разьясните, пожалуйста...

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 5
Откуда: москва
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение geologic » 08 дек 2008, 12:50

Я имел в виду тот подход, когда первичные данные о рельефе разбиваются на категории а) точки с известной высотой б) изолинии в) скелетные линии рельефа. Они ведь обрабатываются по разному, точнее, должны - точки как незыблемые репера, изолинии как "мягкие" приблизительные данные, скелет - как жесткие каркасные линии... Аналогично выглядит разбраковка исходных данных в topo2raster - вам достаточно будет глянуть хелп, сразу поймете принцип. Однако я грешен в слишком общих рассуждениях...

Поглядел еще раз ваши данные, и наши беседы в другой теме. Получается, что выше была теория при наличии правильной цифровой карты, а на практике у вас из данных остались ТОЛЬКО одни горизонтали. В этом случае строить гладкий рельеф средствами 3d-analyst (через жесткие треугольники) категорически не рекомендуется. Получается хоть и "правильный", но угловатый рельеф, а вам это ни к чему. Попробуйте использовать сразу Spatial Analyst для построения модели по рег. сетке (grid), причем наиболее гладкие алгоритмы - может быть, кстати, даже и крайгинг и сплайны, хоть я выше против выступал (прошу прощения). Рельеф будет разумеется "кривой" и негеографичный, но может вас-то как раз удовлетворит его внешний вид, вам ведь геометрическое подобие не очень нужно! А крайгинг как раз и предназначен для работы при недостатке данных! Чем черт не шутит... Ваш второй вариант разумеется, слишком размыт и надо умерить степень сглаживания. IDW тоже пробуйте, как и NN, впрочем. Сплайновый метод поможет выпучить вершины, хотя паразитные выпуклости и краевой эффект при этом могут испортить модель.

Горизонтали очень неблагодарный матерьял, я уже писал... Когда боле-мене определитесь с алгоритмами, надо будет думать как сами линии улучшать - обычно применяется предварительное прореживание - уменьшение числа вертексов в зависимости от их густоты (или кривизны линий).

А если ваши исходные карты масштаба примерно 100К (1:100000), то может и правда лучше SRTM использовать? Готовая модель... Как вариант, синтез - ваши горизонтали УТОЧНЯЮТ SRTM. Мысль не слишком продуманная, но такое может получиться.

Даниил Козлов
Новоприбывший
Сообщения: 1
Зарегистрирован: 08 дек 2008, 18:38
Репутация: 0

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Даниил Козлов » 08 дек 2008, 19:17

Хотел только подтвердить существование проблемы построения ЦМР на основе горизонталей. Независимо от метода интерполяции склоны будут в той или иной степени ступенчатыми. Фундаментальная причина - неравномерное распределение исходных точек с высотами. Большинство интерполяционных алгоритмов расчитаны на равномерное (случайное или регулярное) распределение исходных точек на территории. В горизонталях рельефа точки с высотами "вытянуты" в линии. Для узлов решетки ЦМР, расположенных около горизонтали, вес отметок высоты с этой горизонтали будет выше весовых коэффициентов отметок с других горизонталей. В результате значение высоты в узлах решетки ЦМР будет изменяться скачком примерно по середине между ближайшими горизонталями.

Модули ArcInfo и ArcGis (topogrid), основанные на модели Anudem, строят ЦМР, корректные в гидрологическом отношении. В ЦМР не будет ям (sinks) - бессточных областей, образовавшихся в результате искажений интерполяционных построений. Но склоны при этом все равно будут ступенчатыми.

Для расчета возможностей передвижения транспорта вероятно целесообразно попробовать алгоритм сгущения горизонталей. Он реализован в Idrisi. Есть описания в интернете. Когда я занимался этой проблемой написал свою программу. Склоны действительно получаются лучше, но в пределах днищ водотоков и гребней с крутыми затяжками горизонталей - появляются другие проблемы.

В рамках традиционных интерполяционных алгоритмов лучше использовать методы неточной интерполяции, когда получаемая поверхность рельефа апроксимирует исходные точки, а не проходит через них. Для уменьшения эффекта ступенчатых склонов можно строить ЦМР с заведомо высоким разрешением с последующим агрегированием до искомого с одновременным сглаживанием.

В любом случае от искажений уйти не удастся. Нужно решить в рамках Вашей задачи какие искажения ЦМР для транспорта представляют меньшую беду. Ложные ступени или сглаженный рельеф? В первом случае транспорту нужно будет учитывать возможно завышенные значения крутизны склонов, во втором - недоучтенные препятствия.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 5
Откуда: москва
Контактная информация:

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение geologic » 09 дек 2008, 18:32

О, Даниил, слышно "не мальчика, но мужа" - как говорят в форумах, "решпект". Я не смог так четко сформулировать :( Поправлю лишь в одном - на мой взгляд, topo2raster реализует не гидрологически корректную, как принято говорить, а гидрографически корректную модель рельефа, поскольку не является гидрологическим пакетом. Разумеется, он ничего не знает и об "орографии", если ее не предложить в явном виде (линии гребней, бровок и т.п.). Правда, проблема ступеней не снимается и при полноценном каркасе. Здесь скорее те факторы влияют, что изложены Даниилом.

Еще одно замечание - ступени на рельефе особенно заметны, когда применяется TIN-модель для горизонталей. Это особенность (точнее, недоработка) алгорима ESRI, об этом не раз говорилось, пути решения тоже обсуждались неоднократно. Но это частный вопрос, в случае упрощенного программного решения (для военно-стратегического пакета, как я понимаю) лучше вообще TIN не применять на таких данных.

Андрей
Участник
Сообщения: 69
Зарегистрирован: 02 дек 2003, 18:08
Репутация: 3
Откуда: Киев

Re: Как построить сетку рельефа без резких переходов в районе из

Сообщение Андрей » 11 дек 2008, 11:31

Проблема актуальная :)
На основании собственного опыта тоже посоветал бы найти более детальный рельеф.
Я работал с крупным масшабом 1:10000, соотвественно изолинии через 1 м.
Тогда сама ЦМР получается довольно гладкая. Но вылезают другие проблемы: построение уклонов - ни в дугу. Сразу проявляются все "ступеньки". Приходилось все это сглаживать, как палиатив.

А кто-нибудь, что-нибудь может сказать про Vertical Mapper (?), вроде бы новый модуль для MapInfo. Там должен был быть реализован принцип построения ЦМР по структурным точкам рельефа. Идея была в свое время предложена Черваневым, Воробевым и др. и реализована в "Рельеф-процессоре". В начале 90-х это было круто.

Ответить

Вернуться в «Общие вопросы»