2016-03-20 10 views
1

RでdistHavrsine関数を使用して、数百行の緯度と経度座標の距離を計算します。私のループでは、私はこのコードを持っている:距離は、私はそれがこれらの行を記録する50m以内であり、そしてここで、緯度と経度は、どのように見える参照している座標場合distHaversine関数の使い方は?

if ((distHaversine(c(file[i,"long"], file[i,"lat"]), 
        c(file[j,"long"], file[j,"lat"]))) < 50) 

その後:

0.492399367 30.42530045 

0.496899361 30.42497045 

が、私はこのエラーを取得

.pointsToMatrix(P1)で

エラー:緯度> 90

+0

は([半正矢を使用して2つの異なるデータフレーム間の最も近い距離を見つける方法]小さな再現性の例にの – akrun

+0

が重複する可能性を提供することを検討してくださいhttps://stackoverflow.com/questions/44608687/how-to-find-the-nearest-distance-between-two-different-data-frames-using-haversi) –

答えて

4

私はこのエラーが出る ".pointsToMatrix(p1)におけるエラー:緯度> 90"。 誰もがなぜ解決する方法を説明できますか?

library(geosphere) 
distHaversine(c(4,52), c(13,52)) 
# [1] 616422 
distHaversine(c(4,52), c(1,91)) 
# Error in .pointsToMatrix(p2) : latitude > 90 

あなたが唯一の受け入れ範囲内の座標でdistHaversineを供給することにより、この問題を解決することができます:

エラーは、緯度がスコープ外である、90以上の値しまったことを示しています。

Iは にループの内側、RでdistHavrsine関数を使用しようとしているいくつかの緯度と経度の間の距離が数百行の 座標計算します。距離が50未満 メートルであれば(...)私はそれが

が簡単に数百行の距離行列を計算distm機能を見て、持っているそれらの行を記録したい(つまり、ループなし)。既定ではdistHaversineが使用されます。例えば、65万メートルその後、近いデータフレームの行を取得します

df <- read.table(sep=",", col.names=c("lon", "lat"), text=" 
4,52 
13,52 
116,39") 
(d <- distm(df)) 
#   [,1] [,2] [,3] 
# [1,]  0 616422 7963562 
# [2,] 616422  0 7475370 
# [3,] 7963562 7475370  0 

d[upper.tri(d, T)] <- NA 
(idx <- which(d < 650000, arr.ind = T)) 
#  row col 
# [1,] 2 1 
cbind(df[idx[, 1], ], df[idx[, 2], ]) 
# lon lat lon lat 
# 2 13 52 4 52