Menghitung Indeks Kekasaran Topografi di ArcGIS Desktop?

15

Adakah yang tahu cara menghitung Indeks Kekasaran Topografi di ArcGIS Desktop tanpa akses ke baris perintah ArcInfo Workstation?

"Indeks kekasaran topografi (TRI) adalah pengukuran yang dikembangkan oleh Riley, et al. (1999) untuk menyatakan jumlah perbedaan ketinggian antara sel-sel yang berdekatan dari jaringan elevasi digital. Proses ini pada dasarnya menghitung perbedaan dalam nilai ketinggian dari sel pusat. dan delapan sel yang mengelilinginya, kemudian mengkuadratkan masing-masing dari delapan nilai perbedaan ketinggian untuk membuat semuanya positif dan rata-rata kuadrat. Indeks kekasaran topografi kemudian diturunkan dengan mengambil akar kuadrat dari rata-rata ini, dan sesuai dengan perubahan elevasi rata-rata antara titik di grid dan sekitarnya. " - dari skrip aml oleh Jeffrey Evans

matt wilkie
sumber
tergantung pada versi ArcGIS arcscripts.esri.com/details.asp?dbid=12646 beberapa diskusi dari forum sebelumnya forums.esri.com/Thread.asp?c=93&f=982&t=145448 dicentang tapi pencarian yang terdapat istilah jennessent.com /arcgis/surface_area.htm

Jawaban:

18

Saya akan merekomendasikan untuk melihat keluar ArcGIS) Sangat mudah menggunakan perangkat lunak gdal gratis: http://www.gdal.org/gdaldem.html

gdaldem TRI input_dem output_TRI_map

Atau jika Anda lebih suka di saga gis: http://www.saga-gis.org/saga_modules_doc/ta_morphometry/ta_morphometry_16.html

johanvdw
sumber
11
+1 Saya selalu menghargai melihat solusi non-ArcGIS untuk masalah ArcGIS :-). Ini adalah masalah prinsip, bukan pertentangan terhadap ArcGIS pada khususnya. Orang harus menghindari terkurung dalam solusi perangkat lunak tunggal: tidak hanya berisiko secara profesional, itu juga mencekik secara intelektual.
whuber
Saya tahu saya meminta solusi khusus arcgis, tetapi saya menerima yang ini karena keterusterangannya. Utilitas GDAL mudah diperoleh dan diinstal, diakui secara universal sebagai yang terbaik di kelasnya, dan perintah untuk menghasilkan produk khusus ini adalah definisi kesederhanaan.
matt wilkie
18

Mari kita lakukan aljabar kecil (hanya sedikit).

Biarkan x menjadi nilai di alun-alun pusat; misalkan x_i, i = 1, .., 8 indeks nilai-nilai di kotak tetangga; dan biarkan r menjadi indeks kekasaran topografi. Resep ini mengatakan r ^ 2 sama dengan jumlah (x_i - x) ^ 2. Dua hal yang dapat kita hitung dengan mudah adalah (i) jumlah nilai di lingkungan, sama dengan s = Jumlah {x_i} + x; dan (ii) jumlah kuadrat dari nilai-nilai, sama dengan t = Jumlah {x_i ^ 2} + x ^ 2. (Ini adalah statistik fokus untuk kisi asli dan kuadratnya.)

Memperluas kotak memberi

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

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

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

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

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

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

Misalnya, pertimbangkan lingkungan

1 2 3
4 5 6
7 8 9

Di sini, x = 5, s = 1 + 2 + ... + 9 = 45, dan t = 1 + 4 + 9 + ... + 81 = 285. Kemudian

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

dan kesetaraan aljabar mengatakan

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

The alur kerja karena itu:

Diberi DEM.

  • Hitung s = Jumlah fokus (lebih dari 3 x 3 lingkungan persegi) dari [DEM].

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

  • Hitung t = Jumlah fokus (lebih dari 3 x 3 lingkungan persegi) dari [DEM2].

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

Kembali r = Sqrt ([r2]).

Ini terdiri dari 9 operasi grid di toto , yang semuanya cepat. Mereka mudah dilakukan dalam kalkulator raster (ArcGIS 9.3 dan sebelumnya), baris perintah (semua versi), dan Model Builder (semua versi).

BTW, ini bukan "perubahan ketinggian rata-rata" (karena perubahan ketinggian bisa positif dan negatif): ini adalah perubahan rata-rata ketinggian akar kuadrat. Itu tidak sama dengan "indeks posisi topografi" yang dijelaskan di http://arcscripts.esri.com/details.asp?dbid=14156 , yang (menurut dokumentasi) sama dengan x - (s - x) / 8. Dalam contoh di atas, TPI sama dengan 5 - (45-5) / 8 = 0 sedangkan TRI, seperti yang kita lihat, adalah Sqrt (60).

whuber
sumber
1
Bill terima kasih. Saya menghargai melihat secara spesifik bagaimana alat atau operasi bekerja. Dari ini siapa pun dengan investasi waktu dan energi intelektual yang cocok dapat membangun alat baru untuk melakukan pekerjaan ini menggunakan alat yang mereka miliki. Informasi seperti ini yang akan membuat GIS menjadi layanan yang bermanfaat dalam jangka panjang.
matt wilkie
1
+1 Penjelasan bagus. Saya kira ini berarti permukaan yang curam tapi halus bisa memiliki TRI yang lebih tinggi daripada permukaan yang rata tetapi bergelombang.
Kirk Kuykendall
1
@Kirk Itu benar. Ada beberapa cara untuk menghilangkan efek kemiringan lokal untuk mendapatkan indeks kekasaran "relatif" jika Anda mau. Walaupun saya belum mengerjakan perinciannya, saya percaya bahwa mengurangkan beberapa kelipatan universal (c * a) ^ 2 dari r2 - di mana c adalah cellsize dan a adalah slope (seperti naik / turun , bukan sebagai sudut atau persen) - seharusnya melakukan trik.
Whuber
@whuber seperti biasa jawaban Anda mengandung banyak pengetahuan !! Hanya satu pertanyaan, tolong: apakah ini berarti bahwa tidak mungkin untuk menghitung TRI dari sel-sel yang terletak di ujung raster? Karena mereka tidak dikelilingi oleh sel-sel tetangga di sekitar?
marco
1
@marco TRI dapat diperkirakan bahkan pada sel batas. Seperti ditunjukkan dalam pertanyaan, itu harus dinyatakan sebagai rata-rata, bukan penjumlahan, dengan membagi nilai yang saya berikan di sini dengan 9. Pada sel batas nilai "9" dalam rumus dan dalam penyebut perlu diganti dengan jumlah nilai non-nol dalam lingkungan 3X3 mereka: 6 untuk sel tepi, 4 untuk sel sudut. Kisi nilai-nilai tersebut dapat diperoleh dari jumlah fokus kisi indikator dari nilai-nilai asli (memiliki 1 di semua sel non-NoData dan 0 di tempat lain). Gunakan kisi itu sebagai pengganti konstanta "9" dalam rumus.
Whuber
3

The Riley et al., (1999) TRI adalah akar kuadrat dari deviasi kuadrat yang dijumlahkan. Ini sangat dekat dengan varian yang tidak berskala. Jika Anda menginginkan implementasi Riley's TRI maka silakan ikuti metodologi yang diuraikan oleh @whuber (metodologi yang disediakan oleh @ user3338736 menggeneralisasikan metrik secara maksimal di jendela dan tidak mewakili sel dengan variasi sel).

Saya memiliki variasi TRI di Geomorfometri & Gradien Metrik ArcGIS Toolbox kami yang merupakan varian dari jendela yang ditentukan. Saya menemukan ini lebih fleksibel dan dapat dibenarkan. Ada juga beberapa metrik konfigurasi permukaan lainnya termasuk rugosity dan diseksi.

Jeffrey Evans
sumber
terima kasih Jeffrey. Untuk beberapa alasan halaman itu kosong kecuali untuk judul di Firefox, berpikir tidak masalah di Chrome; mungkin salah satu ekstensi saya. Saya senang melaporkan setidaknya bahwa skrip berfungsi tidak berubah di 10.2.2 (yang saya uji tetap).
matt wilkie
1

-Edit: informasi di bawah ini salah. Silakan lihat posting oleh whuber menjelaskan proses yang benar .....

TRI (Riley 1999) dan TPI (Jenness 2002) serupa, tetapi berbeda.

Untuk menghitung TRI dan TPI menggunakan ArcGIS 10.x ...

Langkah 1: Gunakan alat Statistik Focal untuk membuat 2 set data raster baru dari DEM.

Raster 1 "MAX") Lingkungan: Persegi Panjang, Tinggi: 3, Lebar: 3, Unit: Sel, Tipe statistik: Maksimum

Raster 2 "MIN") Lingkungan: Persegi Panjang, Tinggi: 3, Lebar: 3, Unit: Sel, Tipe statistik: Minimum

Langkah 2: Gunakan Kalkulator Raster untuk melakukan fungsi-fungsi berikut pada 2 dataset raster yang baru saja Anda buat.

Untuk TRI: SquareRoot (Abs ((Kotak ("% MAX%") - Kotak ("% MIN%")))))

Untuk TPI: ("% Input DEM%" - "% MIN%") / ("% MAX%" - "% MIN%")

Berikut ini contoh kode Python yang diekspor dari model yang saya buat untuk 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)
pengguna3338736
sumber
Ini bukan TRI yang dijelaskan dalam pertanyaan. Bahkan, itu tidak dapat dianggap sebagai mengukur "kasar" sama sekali, karena itu berubah ketika Anda hanya menggeser datum vertikal. Misalnya, TRI Anda dari lingkungan 3x3 dengan nilai (1,2, ..., 9) akan menjadi sqrt (9 ^ 2-1 ^ 2) = 8,9, tetapi menambahkan 100 ke nilai (yang hanya mengubah datum tanpa mengubah bentuk permukaan sama sekali) memberikan sqrt (109 ^ 2-101 ^ 2) = 41.
whuber
0

Ini terdengar sangat mirip dengan Indeks Posisi Topografis, suatu proses yang saya gunakan baru-baru ini untuk salah satu proyek saya. Ada ArcScript di halaman dukungan ESRI, kotak alat Topografi di halaman Pusat Sumber Daya ESRI, dan beberapa info lebih lanjut tentang proses di halaman Jenness Enterprises .

Don Meltz
sumber
2
TPI adalah metrik yang sangat berbeda dari kekasaran. Tolong, jangan sampai jalan menggunakannya secara bergantian. Saya percaya bahwa Indeks Posisi Topografis tradisional dihitung sebagai [dem - focalmean (dem)].
Jeffrey Evans