Ähnlichkeit des Geländeaspekts
Ich habe einen Punktdatensatz mit Geländeaspekt an der Position der Punkte, gemessen in Grad. Ich möchte die Ähnlichkeit des Aspekts zwischen den Punkten berechnen, z. B. 70 ° ist ähnlich wie 90 °. Dies ist unkompliziert, aber das Problem tritt für Aspekte in der Nähe der Nordrichtung auf. Ein Aspekt von 350 ° sollte 10 ° entsprechen. Wie kann ich feststellen, dass diese beiden Aspekte ähnlich sind?
Ich suche nach einer Transformation der Werte, die berücksichtigt, dass 358 ° und 2 ° fast gleich sind, obwohl sie in meiner 0-360-Metrik weit voneinander entfernt sind.
Antworten
Berechnen Sie die Differenz und nehmen Sie dann 360 - die absolute Differenz, wenn die absolute Differenz größer als 180 ist.
Hier ist eine Möglichkeit, dies in einer R-Funktion zu tun:
d180 = function(a,b){
d = a-b
d = ifelse(abs(d)<180 , d , 360-abs(d))
d
}
und einige Beispiele:
> d180(0,0)
[1] 0
> d180(0,1)
[1] -1
> d180(0,180)
[1] 180
> d180(0,181)
[1] 179
> d180(358,2)
[1] 4
> d180(2,358)
[1] 4
Ob der Abstand positiv oder negativ ist, ist etwas seltsam. Geben Sie das zurück, abs(d)wenn Sie sich nicht darum kümmern ...
Eine etwas andere Perspektive, Sie könnten einfach den Aspekt linearisieren. Hier ist Pseudocode, der aus dem Werkzeug für lineare Aspekte in unserer ArcGIS-Toolbox für Geomorphometrie und Gradientenmetriken abgerufen wurde. Hinweis; Wir verwenden (mod (..) * 100)und (36000(360*100) / 100)berücksichtigen zwei Dezimalstellen, da diese Fmodin ArcGIS nicht mehr verfügbar sind.
a = aspect(elev) # degrees
t1 = focal(sin(a/57.296), window=3,"sum")
t2 = focal(cos(a/57.296), window=3,"sum")
linear.aspect = mod(((450-(atan2(t1, t2) * 57.296)) * 100), 36000) / 100
Ein weiterer schöner Trick besteht darin, die Steigungsaspekt-Transformation von Stage (1978) zu betrachten, die eine Interaktion ermöglicht. Unter der Annahme einer Neigung in Grad (Bühnenpapier nimmt Prozent an) und eines Aspekts in Grad können Sie dies folgendermaßen berechnen:
s = (slope(elev) / 0.572957795786) * 0.01
a = aspect(elev) * (pi / 180)
scosa = s * cos(a)
scosa = s * sin(a)
Beispiel transformierte Werte für 50% Steigung über 10 Aspekte.
Aspect cosine sine
N 0.500 0.000
N30E 0.433 0.250
N45E 0.345 0.345
N60E 0.250 0.433
E 0.000 0.500
ESE -0.354 0.354
S -0.500 0.000
SSW -0.354 -0.354
W 0.000 -0.500
Oder linearisieren Sie mit einem neu zentrierten Ursprung. Dies erfolgt in der Vegetationsmodellierung, um eine Metrik bereitzustellen, die für die Prodiktivität des Standorts optimiert ist (z. B. TRASP-Transformation von Roberts und Cooper 1989).1 - cos( (pi / 180) (a - 30)) / 2
a = aspect(elev)
trasp = (1 - cos( (3.142 / 180) * (a - 30)) ) / 2
Diese Transformationen sind in ArcGIS in der Toolbox Geomorphometry & Gradient Metrics und im R-Paket SpatialEco (in CRAN) verfügbar .
Haltezeichen (Pseudo):
a = modulus((targetangle-sourceangle),6.283185307179586)
if (a>3.141592653589793)
return a-6.283185307179586
else
return a
(Sprechende Grade :) Wenn der Modul (-45, 360) in Ihrer Sprache nicht 315 zurückgibt, verwenden Sie den Modul ((- 45 + 360), 360). Ihr Modul fn muss Dezimalwerte unterstützen.