如何使用distHaversine函数?

如何使用distHaversine函数?,r,distance,R,Distance,我试图使用R中的distHavrsine函数,在一个循环中计算几百行的纬度和经度坐标之间的距离。在我的循环中,我有以下代码: if ((distHaversine(c(file[i,"long"], file[i,"lat"]), c(file[j,"long"], file[j,"lat"]))) < 50 ) 及 但是我得到了这个错误 .PointToMatrix(p1)中的错误:纬度>90 我得到这个错误“在.pointToMatrix(p1)

我试图使用R中的distHavrsine函数,在一个循环中计算几百行的纬度和经度坐标之间的距离。在我的循环中,我有以下代码:

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

但是我得到了这个错误

.PointToMatrix(p1)中的错误:纬度>90

我得到这个错误“在.pointToMatrix(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
。例如,要获取接近650000米的数据帧行,请执行以下操作:

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

<代码> DF请考虑提供一个小的可重复的示例。
library(geosphere)
distHaversine(c(4,52), c(13,52))
# [1] 616422
distHaversine(c(4,52), c(1,91))
# Error in .pointsToMatrix(p2) : latitude > 90
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