2016-04-24 5 views
1

Also, ich bin ziemlich neu in R, so werde ich versuchen, so genau wie möglich zu sein. Nun, ich habe eine Datei mit 52.000 Punkten in Brasilien verteilt und eine Karte von Waldresten (im Polygon-Format).So berechnen Sie die Entfernung von Punkten zu Multipolygonen innerhalb einer Pufferdistanz in R

Was ich tun möchte, ist die Entfernung von jedem Punkt zu jedem Waldfragment, das in einem Puffer von zum Beispiel 500m ist. Also, wenn ich 3 Fragmente innerhalb eines Puffers von 500 m habe, möchte ich alle drei Abstände (euklidisch) vom Schwerpunkt (Brennpunkt) zu diesen Fragmenten berechnen lassen.

Am Ende möchte ich die mittlere Entfernung von jedem Brennpunkt zu ihren jeweiligen Fragmenten nehmen.

habe ich versucht, die Funktion gWithinDistance, aus dem Paket "rgeos", wie unten:

near_frag_500 < - gWithinDistance (Punkte, veg_natural, 500, byid = T)

wobei das Argument "zeigt" meine Schwerpunkte und "veg_natural" meine Waldrestpolygone. Die Zahl 500 bezieht sich auf den Puffer von 500m. Ich möchte die Entfernung berechnen. Die Ausgabe dieser Funktion ist jedoch eine Matrix mit TRUE- oder FALSE-Werten. TRUE für diese Polygone, die in den 500-m-Puffer fallen, und FALSE für diejenigen Polygone, die außerhalb des 500-m-Puffers liegen. Es gibt mir nicht die tatsächlichen Werte der berechneten Entfernungen. Ich denke, das, was ich suche, ist äquivalent zu der "Generate Near Table" -Funktion in ArcGIS.

Ich würde wirklich schätzen, wenn mir jemand damit helfen könnte! Ich habe auch meine Waldrest-Polygone im Raster, wenn es dafür eine Lösung mit einer Rasterdatei gibt.

Vielen Dank,

Lara

Antwort

0

ich einen einfachen Test mit 7 Punkten und 8 Polygone gesetzt gemacht haben. Alles muss auf ein kartesisches System in Metern projiziert werden, also nicht in die Länge. Verwenden Sie eine lokale UTM-Zone, wenn nichts anderes.

I berechnen die Distanzmatrix von den Punkten zu Polygonen:

> dmat = gDistance(points, veg_natural,byid=TRUE) 

Dann etwas über 500 maskieren, und berechnet die Zeilen bedeuten:

> dmat[dmat>500]=NA 
> apply(dmat, 1, mean, na.rm=TRUE) 
     0  1  2  3  4  5  6  7 
331.5823 262.7129 380.2073 187.2068 111.9961  NaN 224.6962 360.7995 

und das ist der Mittelwert der Abstände von jeder Punkt zu den nächsten Features innerhalb von 500m. Beachten Sie das NaN für Punkt 5, da es nicht 500 m von Polygon-Features entfernt ist.

Wenn diese Matrix zu groß für Ihren Fall mit 52.000 Punkten (und ?? Polygone?) Ist, dann tun Sie es für 1000 Punkte gleichzeitig in einer Schleife oder was auch immer Ihr Computer bewältigen kann. Ich denke, dass meine mit 52.000 umfallen würde.

Wenn Sie wissen möchten, welche des Polygone sind die, die innerhalb von 500 m von jedem Punkt, dann so etwas wie:

> apply(dmat,1, function(r){which(!is.na(r))}) 
$`0` 
5 6 
5 6 

$`1` 
4 5 7 
4 5 7 

zeigt mein erster Punkt (mit der Bezeichnung 0) ist in der Nähe von Polygonen 5 und 6

Verwandte Themen