I want to calculate the distance between several GPS points. I tried
distm(c(lon1,lat1), c(lon2,lat2), fun = distHaversine)
which worked for one point, but not for the columns in my data frame.
So I tried as recommended here:
Calculate distance between 2 lat longs
But I do get different results for these two calculations:
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 how can I calculate the correct distances (which is distm(c(lon1,lat1), c(lon2,lat2), fun = distHaversine)) between two GPS points in the columns of my data frame? I double-checked with so distances that I know I get the right distances this way.
Thanks in advance.
Given that the output you want to store in the new column is this:
77.54033 135.23165
Try this
df$distance<-distHaversine(df[,1:2], df[,3:4])
Which should return
> 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
What exactly is the question? Don't you already have all the distances you need with distHaversine()
?
Do you want to add the distance as column in the dataframe? Here you go:
f$dist <- distm(x = df[, c('lon1', 'lat1')],
y = df[, c('lon2', 'lat2')],
fun = distHaversine
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With