2016-03-20 108 views
1

我想在R中使用distHavrsine函數,在一個循環內計算幾百行的一些緯度和經度座標之間的距離。在我環路我有這樣的代碼:如何使用distHaversine功能?

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

之後,如果距離小於50米,我想它來記錄這些行,並在緯度和經度座標它引用的樣子:

0.492399367 30.42530045 

0.496899361 30.42497045 

,但我得到這個錯誤

錯誤.pointsToMatrix(P1):緯度> 90

+0

請考慮提供一個小的可重複的例子的 – akrun

+0

可能的複製[如何找到採用半正矢兩個不同的數據幀之間的最近距離( https://stackoverflow.com/questions/44608687/how-to-find-the-nearest-distance-between-two-different-data-frames-using-haversi) –

回答

4

我得到這個錯誤 「錯誤在.pointsToMatrix(P1):緯度> 90」。 誰可以解釋爲什麼以及如何解決?

錯誤告訴你,你得到了緯度值大於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解決這個問題。

我嘗試使用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