2017-08-25 53 views
1

我想要計算座標列表中所有可能的座標對之間的距離。然而,我很驚訝地得到一些座標對的NaN,你應該可以計算出它們之間的距離。distHaversine爲什麼會爲某些座標對返回NaN?

我的座標是十進制的經度和緯度。我在R.

這裏使用distHaversine函數從geodist包是一對座標爲哪些distHaversine返回NaN的樣品。我嘗試了許多其他座標對的代碼,並且它能正常工作。

# Create long, lat matrix with two sets of coordinates 
coord_list <- matrix(c(2.5, -177.5, 5.5, -5.5), ncol=2) 
coord_list 

# Create a matrix with the distance between each pair of points (zero on the diagonals) 
dist <- apply(coord_list, 1, 
       FUN=function(X) { 
       distHaversine(X, coord_list) 
       }) 
dist 
# [,1] [,2] 
#[1,] 0 NaN 
#[2,] NaN 0 

在情況下,它相關的,我需要這些距離爲用於空間加權迴歸的反距離加權矩陣。然而,我寧願弄清楚爲什麼distHaversine偶爾會返回NaN,而不是以不同的方式計算矩陣(我知道該怎麼做)。

感謝您的幫助!

+0

最小例如:'distHaversine(C(-177.5,-5.5),C(2.5,5.5))'這些點是對映體(即直接相對地球上的),但這樣是'distHaversine(C(-177.5, - 5),c(2.5,5))'並且工作正常。報告軟件缺陷? – Spacedman

+0

是啊,看起來像一個浮點精度錯誤。我通過電子郵件發送了維護人員... – Spacedman

+0

好吧,很高興知道這不僅僅是我!謝謝! – bsauce

回答

0

感謝您的報告。這被固定在地球圈1.5-7。

我會用非常精確的geosphere::distGeo功能的geopshere::distHaversine代替(這是更對歷史的興趣)

要到達所有點所有點的距離,你可以使用distm功能

coords <- matrix(c(2.5, -177.5, 5.5, -5.5, 0, 0), ncol=2) 

library(geosphere) 
distm(coords) 

#   [,1]  [,2]  [,3] 
#[1,]  0.0 19395754 693590.1 
#[2,] 19395754.2  0 19703549.9 
#[3,] 693590.1 19703550  0.0 

或在rasterpointDistance函數(和相同的算法distGeo):

library(raster) 
pointDistance(coords, lonlat=TRUE) 

#   [,1]  [,2] [,3] 
#[1,]  0.0  NA NA 
#[2,] 19395754.2  0 NA 
#[3,] 693590.1 19703550 0 
相關問題