ArcGIS Masaüstünde Topografik Sağlamlık İndeksi Hesaplanıyor mu?


15

ArcInfo Workstation komut satırına erişmeden ArcGIS Desktop'ta Topografik Sağlamlık İndeksinin nasıl hesaplanacağını bilen var mı ?

"Topografik sağlamlık indeksi (TRI), Riley ve arkadaşları (1999) tarafından, bir dijital yükseklik ızgarasının bitişik hücreleri arasındaki yükseklik farkının miktarını ifade etmek için geliştirilen bir ölçümdür. İşlem esas olarak bir merkez hücredeki yükseklik değerlerindeki farkı hesaplar. Daha sonra bunların tümünü pozitif yapmak için sekiz yükseklik farkı değerinin her birini kareler ve karelerin ortalamasını alır Topografik sağlamlık endeksi daha sonra bu ortalamanın kare kökü alınarak elde edilir ve ortalama yükseklik değişikliğine karşılık gelir. bir ızgara üzerindeki herhangi bir nokta ile çevresi arasında. " - Jeffrey Evans tarafından bir amc ark komut dosyasından


ArcGIS arcscripts.esri.com/details.asp?dbid=12646 önceki forumlardaki tartışmalardan bazılarına bağlıdır forumlar.esri.com/Thread.asp?c=93&f=982&t=145448 kontrol edilmemiş ancak arama jennessent.com

Yanıtlar:


18

ArcGIS'in dışına bakmanızı tavsiye ederim) Ücretsiz gdal yazılımını kullanarak çok kolay: http://www.gdal.org/gdaldem.html

gdaldem TRI input_dem output_TRI_map

Veya saga gis'de tercih ederseniz: http://www.saga-gis.org/saga_modules_doc/ta_morphometry/ta_morphometry_16.html


11
+1 ArcGIS sorunlarına ArcGIS dışı çözümler gördüğümü her zaman takdir ediyorum :-). Bu prensip meselesidir, özellikle ArcGIS'e karşı düşmanlık değil. Kişi tek bir yazılım çözümüne kilitlenmekten kaçınmalıdır: sadece profesyonel olarak riskli olmakla kalmaz, aynı zamanda zihinsel olarak boğucudur.
whuber

Arcgis'e özel bir çözüm istediğimi biliyorum, ama bunun dolaysızlığı nedeniyle bunu kabul ediyorum. GDAL Yardımcı Programlarının edinilmesi ve kurulması kolaydır, evrensel olarak sınıfının en iyisi olarak kabul edilir ve bu özel ürünü üretme komutu basitliğin tanımıdır.
matt wilkie

18

Biraz (sadece biraz) bir cebir yapalım.

X merkezi karedeki değer olsun; x_i, i = 1, .., 8 komşu karelerdeki değerleri endeksleyelim; ve r topografik sağlamlık indeksi olsun. Bu tarifte, r ^ 2, (x_i - x) ^ 2 toplamına eşittir. Kolayca hesaplayabileceğimiz iki şey (i) mahalledeki değerlerin toplamı, s = Sum {x_i} + x; ve (ii) t = Sum {x_i ^ 2} + x ^ 2'ye eşit değerlerin karelerinin toplamı. (Bunlar orijinal ızgara ve karesi için odak istatistikleridir.)

Genişleyen kareler verir

r ^ 2 = Toplam {(x_i - x) ^ 2}

= Toplam {x_i ^ 2 + x ^ 2 - 2 * x * x_i}

= Toplam {x_i ^ 2} + 8 * x ^ 2 - 2 * x * Toplam {x_i}

= [Toplam {x_i ^ 2} + x ^ 2] + 7 * x ^ 2 - 2 * x * [Toplam {x_i} + x - x]

= t + 7 * x ^ 2-2 * x * [Toplam {x_i} + x] + 2 * x ^ 2

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

Örneğin, bir mahalleyi düşünün

1 2 3
4 5 6
7 8 9

Burada x = 5, s = 1 + 2 + ... + 9 = 45 ve t = 1 + 4 + 9 + ... + 81 = 285. Sonra

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

ve cebirsel denklik der ki

60 = r ^ 2 = 285 + 9 * 5 ^ 2 -2 * 5 * 45 = 285 + 225 - 450 = 60, kontrol eder.

Bu nedenle iş akışı :

Bir DEM verildi.

  • S = [DEM] 'nin odak toplamı (3 x 3 kare mahallenin üzerinde).

  • Hesaplama DEM2 = [DEM] * [DEM].

  • [DEM2] 'nin t = Odak toplamı (3 x 3 kare mahallenin üzerinde).

  • Hesapla r2 = [t] + 9 * [DEM2] - 2 * [DEM] * [s].

Dönüş r = sqrt ([R2]).

Bu , hepsi hızlı olan toto'daki 9 ızgara işleminden oluşur . Raster hesap makinesinde (ArcGIS 9.3 ve öncesi), komut satırında (tüm sürümler) ve Model Builder'da (tüm sürümler) kolayca gerçekleştirilir.

BTW, bu bir "ortalama yükseklik değişikliği" değildir (çünkü yükseklik değişiklikleri pozitif ve negatif olabilir): Kök ortalama kare yükseklik değişimidir. Bu olduğu değil de tarif edilen "topografik konum dizin" e eşit http://arcscripts.esri.com/details.asp?dbid=14156 (- s - x) / 8 x eşittir (belgelere göre). Yukarıdaki örnekte, TPI 5 - (45-5) / 8 = 0'a eşitken, TRI, gördüğümüz gibi, Sqrt (60) 'dır.


1
Teşekkürler Bill. Bir aracın veya işlemin nasıl çalıştığının ayrıntılarını gördüğüme teşekkür ederim. Bundan, uygun zaman ve entelektüel enerjiye yatırım yapan herkes, elindeki araçları kullanarak bu işi gerçekleştirmek için yeni bir cihaz oluşturabilir. GIS.se'yi uzun vadede yararlı bir hizmet haline getirecek bu gibi bilgiler.
matt wilkie

1
+1 Harika açıklama. Sanırım bu, dik fakat pürüzsüz bir yüzeyin düz fakat engebeli bir yüzeye göre daha yüksek bir TRI'ye sahip olabileceği anlamına gelir.
Kirk Kuykendall

1
@Kirk Doğru. İsterseniz "göreceli" sağlamlık endeksi elde etmek için yerel eğimin etkisini kaldırmanın yolları vardır. Ben ayrıntıları çalışmamış olmasına rağmen, inanıyorum bazı evrensel katını çıkarılarak (c * a) r2 ^ 2 - nereye c cellsize ve bir , yükselme / run olarak (eğim olduğu değil bir açı olarak ya yüzde) - hile yapmak gerekir.
whuber

@whuber her zamanki gibi cevaplarınız inanılmaz miktarda bilgi içerir !! Sadece bir soru lütfen: bu, rasterlerin kenarlarında bulunan hücrelerin TRI'sının hesaplanmasının mümkün olmadığı anlamına mı geliyor? Çevresindeki komşu hücrelerle çevrili olmadıkları için mi?
marco

1
@marco TRI sınır hücrelerinde bile tahmin edilebilir. Soruda belirtildiği gibi, burada verdiğim değerleri 9'a bölerek toplam yerine ortalama olarak ifade edilmelidir. Sınır hücrelerinde formülde ve paydada "9" değerinin değiştirilmesi gerekir. 3X3 mahallelerindeki boş olmayan değerlerin sayısı: kenar hücreler için 6, köşe hücreler için 4. Bu tür değerlerin bir ızgarası, orijinal değerlerin gösterge ızgarasının odak toplamından elde edilebilir (NoData olmayan tüm hücrelerde 1'ler ve başka yerlerde 0'lar vardır). Bu ızgarayı formüllerde sabit "9" yerine kullanın.
whuber

3

Riley ve ark., (1999) TRI, toplanan kare sapmaların kare köküdür. Bu ölçeklenmemiş varyansa çok yakındır. Riley'nin TRI'sının bir uygulamasını istiyorsanız, lütfen @whuber tarafından özetlenen metodolojiyi takip edin (@ user3338736 tarafından sağlanan yöntem, metriği penceredeki maksimum değere genelleştirdi ve hücreyi hücre varyasyonuyla temsil etmiyor).

Belirtilen bir pencerenin varyansı olan Geomorphometry & Gradient Metrics ArcGIS Araç Kutusunda TRI varyasyonu var . Bunu daha esnek ve haklı buluyorum. Ayrıca, buruşukluk ve diseksiyon dahil olmak üzere başka yüzey konfigürasyon metrikleri de vardır.


teşekkürler Jeffrey. Bir nedenden ötürü bu sayfa Firefox'taki başlık dışında boş, Chrome'da iyi olduğunu düşündü; uzantılarımdan biri olabilir. En azından komut dosyalarının 10.2.2'de (zaten test ettiğim) değişmeden çalıştığını bildirmekten mutluluk duyuyorum.
matt wilkie

1

-Düzenle: aşağıdaki bilgiler yanlış. Lütfen doğru süreci açıklayan whuber'ın gönderisine bakın .....

TRI (Riley 1999) ve TPI (Jenness 2002) benzer, ancak farklıdır.

ArcGIS 10.x kullanarak TRI ve TPI hesaplamak için ...

Adım 1: Bir DEM'den 2 yeni raster veri kümesi oluşturmak için Odak İstatistikleri aracını kullanın.

Raster 1 "MAX") Komşuluk: Dikdörtgen, Yükseklik: 3, Genişlik: 3, Birimler: Hücre, İstatistik türü: Maksimum

Raster 2 "MIN") Komşuluk: Dikdörtgen, Yükseklik: 3, Genişlik: 3, Birimler: Hücre, İstatistik türü: Minimum

Adım 2: Yeni oluşturduğunuz 2 tarama veri kümesinde aşağıdaki işlevleri gerçekleştirmek için Raster Hesaplayıcı'yı kullanın.

TRI için: SquareRoot (Abs ((Kare ("% MAX%") - Kare ("% MIN%"))))

TPI için: ("% DEM% Girdi" - "% MIN%") / ("% MAX%" - "% MIN%")

İşte TRI için yaptığım bir modelden ihraç edilen örnek Python kodu ....

# -*- 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)

Bu, soruda açıklanan TRI değildir. Aslında, "sağlamlığı" ölçmek olarak düşünülemez, çünkü yalnızca dikey veriyi değiştirdiğinizde değişir. Örneğin, değerleri (1,2, ..., 9) olan 3x3 bir mahallenin TRI'niz sqrt (9 ^ 2-1 ^ 2) = 8,9 olur, ancak değerlere 100 ekler (bu datumu yüzeyin şeklini değiştirmek) sqrt (109 ^ 2-101 ^ 2) = 41 verir.
whuber

0

Bu, projelerimden biri için yakın zamanda kullandığım bir süreç olan Topografik Konum Dizini'ne çok benziyor. ESRI destek sayfasında bir ArcScript , ESRI Kaynak Merkezi sayfasında bir Topografi araç kutusu ve Jenness Enterprises sayfasındaki işlem hakkında daha fazla bilgi bulunmaktadır .


2
TPI pürüzlülükten çok farklı bir metriktir. Lütfen, bunları birbirlerinin yerine kullanma yolunda gitmeyelim. Topografik Konum İndeksinin geleneksel olarak [dem - focalmean (dem)] olarak hesaplandığına inanıyorum.
Jeffrey Evans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.