Ähnlichkeit des Geländeaspekts

Sep 24 2020

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

3 Spacedman Sep 24 2020 at 20:12

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 ...

2 JeffreyEvans Sep 25 2020 at 00:21

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 .

Stormwind Sep 25 2020 at 04:50

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.