Обчислення індексу топографічної стійкості на робочому столі ArcGIS?


15

Хтось знає, як обчислити індекс топографічної стійкості на робочому столі ArcGIS без доступу до командного рядка ArcInfo Workstation?

"Індекс топографічної стійкості (TRI) - це вимірювання, розроблене Ріллі та ін. (1999) для вираження величини різниці висот між сусідніми осередками цифрової сітки висоти. Процес по суті обчислює різницю значень висоти від центральної комірки і вісім осередків, що їх безпосередньо оточують. Потім він розподіляє кожне з восьми значень різниці висот, щоб зробити їх усі позитивними, і середні квадрати. Індекс топографічної стійкості виводиться, беручи квадратний корінь цього середнього, і відповідає середній зміні висоти між будь-якою точкою на сітці та її околицями. " - із архрипту "aml" Джефрі Еванса


залежить від версії ArcGIS arcscripts.esri.com/details.asp?dbid=12646 деякі дискусії з попередніх форумів forums.esri.com/Thread.asp?c=93&f=982&t=145448, які не контролюються, але пошук містить термін jennessent.com /arcgis/surface_area.htm

Відповіді:


18

Я рекомендую заглянути за межами ArcGIS) Дуже легко використовувати безкоштовне програмне забезпечення gdal: http://www.gdal.org/gdaldem.html

gdaldem TRI input_dem output_TRI_map

Або якщо ви хочете, щоб це було в saga gis: http://www.saga-gis.org/saga_modules_doc/ta_morphometry/ta_morphometry_16.html


11
+1 Я завжди вдячний за те, щоб побачити рішення, що не стосуються ArcGIS, для проблем ArcGIS :-). Це питання принципового, а не антагонізму до ArcGIS зокрема. Слід уникати замикання на одному програмному рішенні: це не лише професійно ризиковано, але й інтелектуально задушливе.
whuber

Я знаю, що я попросив специфічне рішення аркгізу, але я приймаю це через його прямоту. Утиліти GDAL легко придбати та встановити, загальновизнані як найкращі в класі, а командою для створення цього конкретного продукту є визначення простоти.
matt wilkie

18

Давайте зробимо невелику (ще трохи) алгебру.

Нехай x - значення на центральній площі; нехай x_i, i = 1, .., 8 індексує значення в сусідніх квадратах; і нехай r - індекс топографічної стійкості. Цей рецепт говорить, що r ^ 2 дорівнює сумі (x_i - x) ^ 2. Дві речі, які ми можемо легко обчислити, це (i) сума значень в околиці, що дорівнює s = Сума {x_i} + x; та (ii) сума квадратів значень, що дорівнює t = Сума {x_i ^ 2} + x ^ 2. (Це фокусні статистичні дані щодо вихідної сітки та її площі.)

Розширення квадратів дає

r ^ 2 = сума {(x_i - x) ^ 2}

= Сума {x_i ^ 2 + x ^ 2 - 2 * x * x_i}

= Сума {x_i ^ 2} + 8 * x ^ 2 - 2 * x * Сума {x_i}

= [Сума {x_i ^ 2} + x ^ 2] + 7 * x ^ 2 - 2 * x * [Сума {x_i} + x - x]

= t + 7 * x ^ 2 - 2 * x * [Сума {x_i} + x] + 2 * x ^ 2

= t + 9 * x ^ 2 - 2 * x * s .

Наприклад, розглянемо сусідство

1 2 3
4 5 6
7 8 9

Тут x = 5, s = 1 + 2 + ... + 9 = 45, і t = 1 + 4 + 9 + ... + 81 = 285. Тоді

(1-5) ^ 2 + (2-5) ^ 2 + ... + (9-5) ^ 2 = 16 + 9 + 4 + 1 + 1 + 4 + 9 + 16 = 60 = r ^ 2

і алгебраїчна еквівалентність говорить

60 = r ^ 2 = 285 + 9 * 5 ^ 2 -2 * 5 * 45 = 285 + 225 - 450 = 60, який перевіряє.

Таким чином, робочий процес :

Дано DEM.

  • Обчисліть s = Фокусна сума (понад 3 х 3 квадратних мікрорайони) [DEM].

  • Обчисліть DEM2 = [DEM] * [DEM].

  • Обчисліть t = Фокусна сума (понад 3 х 3 квадратних мікрорайони) [DEM2].

  • Обчисліть r2 = [t] + 9 * [DEM2] - 2 * [DEM] * [s].

Повернення r = Sqrt ([r2]).

Складається з 9 операцій сітки в тото , всі вони швидкі. Вони легко виконуються в растровому калькуляторі (ArcGIS 9.3 і новіші версії), командному рядку (всі версії) та Model Builder (усі версії).

До речі, це не "середня зміна висоти" (оскільки зміни висоти можуть бути позитивними та негативними): це середньоквадратична зміна висоти квадрата. Він не дорівнює "індексу топографічної позиції", описаному на http://arcscripts.esri.com/details.asp?dbid=14156 , що (згідно з документацією) дорівнює x - (s - x) / 8. У наведеному вище прикладі TPI дорівнює 5 - (45-5) / 8 = 0, тоді як TRI, як ми бачили, є Sqrt (60).


1
Дякую Білл. Я вдячний побачити специфіку роботи інструменту чи операції. Завдяки цьому будь-хто, маючи належну інвестицію часу та інтелектуальної енергії, може створити новий апарат для виконання цієї роботи, використовуючи інструменти, які вони мають під рукою. Така інформація, яка зробить GIS.se корисною послугою в довгостроковій перспективі.
matt wilkie

1
+1 Відмінне пояснення. Я здогадуюсь це означає, що крута, але гладка поверхня могла мати більш високу TRI, ніж плоска, але грудка поверхня.
Кірк Куйкендалл

1
@Kirk Це правильно. Є способи зняти ефект локального схилу, щоб отримати індекс "відносної" нерівномірності, якщо вам подобається. Хоча я ще не опрацював деталі, я вважаю, що віднімання деякого універсального кратного (c * a) ^ 2 від r2 - де c - розмір клітини і a - нахил (як підйом / біг, а не як кут або відсотків) - слід робити трюк.
whuber

@whuber як завжди ваші відповіді містять дивовижну кількість знань !! Лише одне запитання, будь ласка: чи означає це, що неможливо обчислити TRI комірок, розташованих у самих краях растру? Через них не оточують сусідні осередки навколо?
marco

1
@marco TRI можна оцінити навіть у граничних осередках. Як зазначено в запитанні, його слід виразити як середнє значення, а не суму, діленням значень, які я даю тут, на 9. У граничних осередках значення "9" у формулі та в знаменнику потрібно замінити на кількість ненульових значень у їх околицях 3X3: 6 для крайових комірок, 4 для кутових комірок. Сітка таких значень може бути отримана з фокусної суми індикаторної сітки вихідних значень (вона має значення 1 у всіх клітинах, що не належать до NoData, і 0 в інших місцях). Використовуйте цю сітку замість постійної "9" у формулах.
whuber

3

TRI Riley et al. (1999) - це квадратний корінь узагальнених відхилень у квадраті. Це дуже близько до нерозмірної дисперсії. Якщо ви хочете реалізувати TRI Райлі, тоді, будь ласка, дотримуйтесь методології, викладеної @whuber (методологія, надана @ user3338736, узагальнила метрику до максимуму у вікні і не представляє клітинку за зміною комірки).

У нашому інструменті ArcGIS Gecorphometry & Gradient Metrics ArcGIS є варіацією TRI, що є дисперсією вказаного вікна. Я вважаю це більш гнучким і виправданим. Існують також деякі інші показники конфігурації поверхні, включаючи жорсткість і розсічення.


дякую Джефрі. Чомусь сторінка порожня, окрім заголовка в Firefox, подумала, що це нормально в Chrome; може бути одним із моїх розширень. Я радий повідомити принаймні, що сценарії працюють незмінними в 10.2.2 (ті, які я протестував у будь-якому випадку).
matt wilkie

1

-Редагуйте: наведена нижче інформація неправильна. Перегляньте публікацію, пояснивши правильний процес .....

TRI (Riley 1999) та TPI (Jenness 2002) схожі, але різні.

Для обчислення TRI і TPI за допомогою ArcGIS 10.x ...

Крок 1: Використовуйте інструмент "Фокусна статистика", щоб зробити 2 нових набори растрових даних з DEM.

Растр 1 "MAX") Район: Прямокутник, Висота: 3, Ширина: 3, Вузли: Комір, Тип статистики: Максимум

Растр 2 "MIN") Район: Прямокутник, Висота: 3, Ширина: 3, Вузли: Комір, Тип статистики: Мінімум

Крок 2: Використовуйте калькулятор растра для виконання наступних функцій на 2-х растрових наборах даних, які ви тільки що створили.

Для TRI: SquareRoot (Abs ((Square ("% MAX%") - Square ("% MIN%"))))

Для TPI: ("% введення DEM%" - "% MIN%") / ("% MAX%" - "% MIN%")

Ось зразок коду Python, експортований із моделі, створеної для TRI ....

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# script.py
# Created on: 2014-03-06 08:56:13.00000
#   (generated by ArcGIS/ModelBuilder)
# Usage: script <Input_raster> <TRI_Raster> 
# Description: 
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Script arguments
Input_raster = arcpy.GetParameterAsText(0)

TRI_Raster = arcpy.GetParameterAsText(1)
if TRI_Raster == '#' or not TRI_Raster:
    TRI_Raster = "C:\\Users\\Documents\\ArcGIS\\Default.gdb\\rastercalc1" # provide a default value if unspecified

# Local variables:
MIN = Input_raster
MAX = Input_raster

# Process: 3x3Max
arcpy.gp.FocalStatistics_sa(Input_raster, MAX, "Rectangle 3 3 CELL", "MAXIMUM", "DATA")

# Process: 3x3Min
arcpy.gp.FocalStatistics_sa(Input_raster, MIN, "Rectangle 3 3 CELL", "MINIMUM", "DATA")

# Process: Raster Calculator
arcpy.gp.RasterCalculator_sa("SquareRoot(Abs((Square(\"%MAX%\") - Square(\"%MIN%\"))))", TRI_Raster)

Це не TRI, описане у запитанні. Насправді це взагалі не можна вважати вимірюванням "міцності", оскільки воно змінюється, коли ви просто зміщуєте вертикальну дату. Наприклад, ваш TRI сусідства 3x3 зі значеннями (1,2, ..., 9) буде sqrt (9 ^ 2-1 ^ 2) = 8,9, але додаючи 100 до значень (що просто змінює дату без зміна форми поверхні взагалі) дає sqrt (109 ^ 2-101 ^ 2) = 41.
whuber

0

Це дуже схоже на індекс топографічної позиції - процес, який я нещодавно використовував для свого проекту. На сторінці підтримки ESRI є ArcScript , набір інструментів Topography на сторінці Центру ресурсів ESRI та додаткова інформація про процес на сторінці Jenness Enterprises .


2
TPI - це зовсім інший показник, ніж грубість. Будь ласка, не давайте піти по дорозі, використовуючи їх взаємозамінно. Я вважаю, що індекс топографічної позиції традиційно обчислюється як [dem - focalmean (dem)].
Джефрі Еванс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.