2017-02-08 8 views
0

Ich möchte den Abstand zwischen mehreren GPS-Punkten berechnen. Ich versuchteBerechnen Sie den Abstand zwischen zwei Koordinaten in einem Koordinatensystem

distm(c(lon1,lat1), c(lon2,lat2), fun = distHaversine) 

, die für einen Punkt gearbeitet, aber nicht für die Spalten in meinem Datenrahmen.

So versuchte ich, wie hier empfohlen:

Calculate distance between 2 lat longs

Aber ich unterschiedliche Ergebnisse für diese beiden Berechnungen erhalten:

df <- read.table(sep=",", col.names=c("lat1", "lon1", "lat2", "lon2"),text=" 
7.348687,53.36575,7.348940,53.36507 
7.348940, 53.36507,7.350939,53.36484") 


# as recommended in the link above 
distHaversine(df[,2:1], df[,4:3]) 

[1] 80.18433 223.97181 

# with distm 
distm(c(7.348687,53.36575), c(7.348940,53.36507), fun = distHaversine) 

     [,1] 
[1,] 77.54033 

distm(c(7.348940, 53.36507), c(7.350939,53.36484), fun = distHaversine) 

     [,1] 
[1,] 135.2317 

So wie kann ich die richtigen Abstände zu berechnen (die distm (c (lon1, lat1), c (lon2, lat2), fun = distHaversine)) zwischen zwei GPS-Punkten in den Spalten meines Datenrahmens? Ich habe das mit so großen Abständen überprüft, dass ich weiß, dass ich auf diese Weise die richtigen Abstände habe.

Vielen Dank im Voraus.

Antwort

0

Was genau ist die Frage? Haben Sie nicht schon alle benötigten Entfernungen mit distHaversine()?

Möchten Sie die Entfernung als Spalte im Dataframe hinzufügen? Hier gehen Sie:

f$dist <- distm(x = df[, c('lon1', 'lat1')], 
       y = df[, c('lon2', 'lat2')], 
       fun = distHaversine 
       ) 
2

Da die Ausgabe, die Sie in der neuen Spalte speichern möchten, ist dies:

77.54033 135.23165 

Versuchen Sie, diese

df$distance<-distHaversine(df[,1:2], df[,3:4]) 

Welche zurückgeben sollte

> df 
     lat1  lon1  lat2  lon2 distance 
1 7.348687 53.36575 7.348940 53.36507 77.54033 
2 7.348940 53.36507 7.350939 53.36484 135.23165 
+0

Vielleicht hätte ich etwas präziser sein sollen. Mein Datenframe enthält 250 Zeilen, was das Ändern der Daten komplizierter macht. Außerdem möchte ich die Ausgabe als eine weitere Spalte bekommen. –

+0

Antwort aktualisiert. – jRafi

0

Ich fand eine andere Lösung für die pr oblem

for (i in 1:2) { 

    a<-df$lon1[i] 
    b<-df$lat1[i] 
    c<-df$lon2[i] 
    d<-df$lat2[i] 

    df$distance[i]<-distm(c(a,b),c(c,d), fun = distHaversine) 
    } 

write.xlsx(df, file = "C:/Users/distances.xlsx") 
Verwandte Themen