Ich habe ein Datenframe, das eine Liste von Orten und ihren geographischen Positionen in UTM (Universal Transverse Mercator) -Koordinaten hat.Finden Sie, welche Punkte innerhalb einer gegebenen Entfernung von jedem Punkt sind
Es sieht ungefähr so aus:
Place X_UTM Y_UTM
1 574262.0 6140492
2 571251.2 6141669
3 570841.9 6142535
4 570233.8 6141213
5 578269.2 6140304
6 575067.1 6137444
I, für jeden Platz (jede Zeile des Datenrahmen) identifizieren wollen, die von den anderen Orten innerhalb eines gegebenen euklidischen Abstandes sind. In diesem Fall möchte ich herausfinden, welche Orte näher als 1 Kilometer sind.
ich so etwas wie dies versucht haben:
foo <- function(x, y) dist(c(x, y), method = "euclidian") < 1000
, die eine Funktion sein sollte, die die Punkte gibt, die näher als 1000 Meter sind. Dann:
x <- lapply(df(,c(i, x, y)), FUN = foo)
wo i
"Place"
ist, x
ist "X_UTM"
und y
ist "Y_UTM"
. Dies funktioniert überhaupt nicht.
Der Ausgang Ich bin nach sollte wie folgt aussehen (nicht aus den oben angegebenen Zahlen erhalten):
# Place Closest
# 1 2, 5
# 2 1
# 3 NA
# 4 5
# 5 1, 4
# 6 NA
korrigiert mich wenn ich falsch sein, sollte aber nicht die Abstandsfunktion zwei _points_ annehmen, das heißt zwei x und y zwei Werte? –
Ja. Ich möchte den Abstand zwischen jeder Zeile berechnen. Das sollte sqr ((X_UTM [1] - X_UTM [i])^2 - (Y_UTM [1] - Y_UTM [i])^2) für alle Zeilen sein und dann aufzeichnen, welche [i] weniger als 1000 sind. –
kann du machst nicht 'dst <- as.matrix (dist (d [-1])); diag (dst) <- NA; gelten (dst, 1, Funktion (x) einfügen (die (x <1000), Kollaps = ",")) ' – user20650