2017-02-08 8 views
0

複数のGPSポイント間の距離を計算します。 は、私は私のデータフレームに一点のためではなく、列のために働いデータフレーム内の2つのlong lat座標間の距離を計算します。

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

を試してみました。

ここで推奨されているようにだから私は試してみました:

Calculate distance between 2 lat longs

しかし、私はこれらの2つの計算のために異なる結果を取得します:

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 

は、どのように私はdistmある正しい距離を(計算することができます私のデータフレームの列にある2つのGPSポイント間の距離(c(lon1、lat1)、c(lon2、lat2)、fun = distHaversine)私は遠く離れているので、私は正しい距離をこの方法で得ることを知っています。

ありがとうございます。

答えて

0

質問は正確には何ですか? distHaversine()で必要な距離をお持ちではないですか?

データフレームに列として距離を追加しますか?ここに行く:

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

新しい列に格納する出力がこのであることを考える:

77.54033 135.23165 

> 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 
を返す必要があります。この

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

をお試しください

+0

おそらく私はもう少し正確だったはずです。データフレームに250行含まれているため、データの変更がより複雑になります。さらに、出力を別の列として取得したいと考えています。 –

+0

回答が更新されました。 – jRafi

0

私は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") 
関連する問題