Как рассчитать кривизну местности?

29

У меня есть растр высот, и я хотел бы получить некоторые базовые переменные местности, такие как уклон, шероховатость, аспект или кривизна.

Проблема в том, что у меня нет возможности рассчитать кривизну с помощью аналитика местности:

введите описание изображения здесь

Может кто-нибудь сказать мне, почему этот индикатор не в списке? Как я могу рассчитать это иначе?

Damien
источник

Ответы:

20

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

В последнее время было проведено множество исследований по расчетам кривизны данных LiDAR с высоким разрешением, которые показали, что существует разрыв масштабирования с разрешением около 2 или 3 метров, и выше этой точки необходимо использовать более разные алгоритмы (с которыми я не очень знаком) , Наилучшая информация о расчете топографической кривизны, вероятно, содержится в Hurst et al 2012 и ссылках в нем.

Основной принцип расчета кривизны, как и для уклона и аспекта, состоит в том, чтобы пропустить движущееся окно по поверхности рельефа и согласовать значения высот с полиномиальной функцией из 6 членов, коэффициенты которой приведут к уклону, аспекту и кривизне центра ячейка движущегося окна.

ArcGIS использует окно поиска 3x3, которое дает хорошие результаты только в областях, полностью лишенных растительности, что делает инструмент довольно бесполезным, если люди не знают об этом ограничении, это может указывать на то, почему его нет в QGIS.

Математика была получена первоначально (я думаю) в Эванс (1980) и была упрощена на нескольких страницах в « Принципах географических информационных систем» (ссылка на Amazon), которые я могу рекомендовать в качестве хорошего руководства для такого рода анализа местности на базовом уровне.

Один из способов вычисления кривизны матрицы высот состоит в том, чтобы преобразовать матрицу высот в растр ASCII, прочитать его в массив NumPy и затем выполнить подгонку полинома для движущегося окна, проходящего через данные. Это довольно легко сделать, но выполнить очень медленно и требует значительной оптимизации (такие операции часто переносятся на c ++ для ускорения).

Для выполнения операции в QGIS вы можете использовать плагин GRASS r.slope.aspect, который также ограничен фиксированным окном 3x3.

Я понимаю, что это не простой ответ, на который вы, несомненно, надеялись, но я надеюсь, вы понимаете, что искривление сложно получить осмысленным образом. Всего наилучшего.

Evans, I. S. (1980), An integrated system of terrain analysis and slope mapping, Z. Geomorphol., 36, 274–295.
sgrieve
источник
Спасибо за все развитие! Тем не менее, я был заинтригован тем фактом, что опция «Кривизна» отсутствует в списке аналитика растровых ландшафтов QGIS. Это нормально? Я переустанавливал свою версию QGIS 1.8, чтобы быть уверенным, но ее все еще нет: - /
Дэмиен
1
обратите внимание, что в GRASS вы можете использовать 'r.param.scale', который вычисляет производные ландшафта, такие как кривизна, с заданным пользователем размером для оператора окна (а не только по умолчанию 3x3).
user1013346
12

Версия ESRI Raster Analysis для расчета кривизны может быть полезна для разработки плагина для QGIS.

Для каждой ячейки многочлен четвертого порядка вида:

введите описание изображения здесь

Z = Ax²y² + Bx²y + Cxy² + Dx² + Ey² + Fxy + Gx + Hy + I

подходит для поверхности, состоящей из окна 3х3. Коэффициенты a, b, c и т. Д. Рассчитываются по этой поверхности.

Соотношения между коэффициентами и девятью значениями высоты для каждой пронумерованной ячейки, как показано на диаграмме, являются следующими: Диаграмма значений кривизны Диаграмма значений кривизны

A = [(Z1 + Z3 + Z7 + Z9) / 4 - (Z2 + Z4 + Z6 + Z8) / 2 + Z5] / L4

B = [(Z1 + Z3 - Z7 - Z9) / 4 - (Z2 - Z8) / 2] / L3

C = [(-Z1 + Z3 - Z7 + Z9) / 4 + (Z4 - Z6)] / 2] / L3

D = [(Z4 + Z6) / 2 - Z5] / L2

E = [(Z2 + Z8) / 2 - Z5] / L2

F = (-Z1 + Z3 + Z7 - Z9) / 4L2

G = (-Z4 + Z6) / 2L

H = (Z2 - Z8) / 2L

Я = Z5

Выходные данные инструмента Кривизна - это вторая производная поверхности, например наклон склона, такая, что:

Кривизна = -2 (Д + Е) * 100

Полная информация и источник:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00q90000000t000000

Mapperz
источник
2
Это отличная сводка по математике, но ее можно упростить, используя 6-кратный полином без заметных потерь в качестве, если разрешение ваших данных ниже 3 метров.
скорби
5
Поскольку «кривизна» ESRI зависит только от D + E, все остальное не нужно. Вычисление -2(D+E)*100as (100/L2)*(3*Z5 - [Z2+Z4+Z6+Z8+Z5])показывает, как получить это значение как трехкратное исходное значение, Z5за вычетом суммы окрестности Z2+Z4+Z6+Z8+Z5(с использованием круга радиуса 1), все из которой пересчитано 100/L2. Это всего лишь три простые операции с сеткой.
whuber
@whuber: Может кто-нибудь сказать мне, что такое х и у? а Z представляет значение кривизны? тогда что такое -2 (Д + Е) * 100? Возможно ли, что если у меня есть векторный файл с таким количеством многоугольников, и я хочу знать, является ли область внутри многоугольника вогнутой или выпуклой (план и кривизна профиля)?
Hardik
Z = Высота Значение и -2 (D + E) * 100 = Кривизна Значение en.wikipedia.org/wiki/Curvature (Osculating_Circle)
Mapperz
6

Кривизна может быть рассчитана с использованием модуля SAGA «Анализ рельефа - морфометрия ---> Наклон, аспект, кривизна»

Расчет может быть выполнен на основе одного из этих алгоритмов:

  • Максимальный уклон (Трэвис и др., 1975)
  • Максимальный уклон треугольника (Tarboton 1997)
  • Приспособленный самолет наименьших квадратов (Horn 1981, Costa-Cabral & Burgess 1996)
  • Fit 2.Degree Polynom (Бауэр, Роденбург, Борк 1985)
  • Fit 2. Степень Полином (Heerdegen & Beran 1982)
  • Fit 2.Degree Polynom (Zevenbergen & Thorne 1987)
  • Fit 3.Degree Polynom (Харалик 1983)
Владимир
источник
3

LandSerf может сделать это. Вы можете определить размер окна (3 * 3, 5 * 5, 7 * 7, 11 * 11, ...), но это должно быть нечетное число. многомасштабный анализ. Вы можете рассмотреть масштабную зависимость наклона, аспекта и кривизны. http://www.landserf.org/ LandSerf подгонит ко-квадратичное полиномиальное уравнение к определенным предопределенным окнам, но если вы определите большой размер окна, например, 50 * 50, это займет много времени. Это зависит от размера растра и размера окон, которые вы определяете. Джо Вуд написал Ландсерф для докторской диссертации. Это написано на Java.

  • Кривизна профиля
  • План Кривизны
  • Кривизна долготы
  • Кривизна поперечного сечения
  • Средняя кривизна
  • Минимальная кривизна
  • Макс кривизна

Можно рассчитать в другом масштабе в LandSerf

рамин оркиде
источник
2

Вы также можете попробовать бесплатную SAGA GIS (http://sourceforge.net/apps/trac/saga-gis/wiki) или TAS (http://www.uoguelph.ca/~hydrogeo/TAS/index.html).

Rok
источник
Можете ли вы предоставить более подробную информацию о том, как эти пакеты работают для расчета кривизны? Размещенные вами ссылки являются общими ссылками на два пакета ГИС и не имеют прямого отношения к заданному вопросу.
Скорбим
1
Извините за очень короткий ответ. В SAGA вы можете найти модуль Анализ местности - Составной анализ -> Стандартный анализ местности. Там вы можете рассчитать кривизну, профиль кривизны, план кривизны (нет подробного описания внутри справки программного обеспечения). Вы можете легко импортировать данные в SAGA из asc, flt, ...
Rok
@sgrieve В TAS вы можете рассчитать профиль, план и тангенциальную кривизну (меню: Анализ рельефа -> Первичные атрибуты рельефа -> Производные поверхности). Опять же, есть немного описания, как это работает.
Рок