Если вы задаете вопрос, пожалуйста, включите пример данных.
p <- rbind(c(0,0),c(90,90),c(10,10),c(-120,-45))
colnames(p) <- c("lon", "lat")
p
# lon lat
#[1,] 0 0
#[2,] 90 90
#[3,] 10 10
#[4,] -120 -45
Чтобы получить расстояние от первой до второй точки, второй до третьей точки и т. Д., Вы можете сделать
library(geosphere)
distGeo(p)
#[1] 10001966 8896111 13879039
или
distMeeus(p)
#[1] 10001959 8896115 13879009
Чтобы получить расстояние от всех (длинных / длинных) точек до всех точек, вы можете использовать geosphere::distm
;предоставление функции выбора расстояния (distGeo
является значением по умолчанию и наиболее точным).
library(geosphere)
distm(p, fun=distGeo)
# [,1] [,2] [,3] [,4]
#[1,] 0 10001966 1565109 12317881
#[2,] 10001966 0 8896111 14986910
#[3,] 1565109 8896111 0 13879039
#[4,] 12317881 14986910 13879039 0
Вы также можете использовать raster::pointDistance
.
library(raster)
d <- pointDistance(p, lonlat=TRUE)
as.dist(d)
# 1 2 3
#2 10001966
#3 1565109 8896111
#4 12317881 14986910 13879039
Также возможнополучить расстояния между двумя наборами точек, возможно, с разным количеством точек.Например:
pointDistance(p, p[1:2,], lonlat=TRUE)
# [,1] [,2]
#[1,] 0 10001966
#[2,] 10001966 0
#[3,] 1565109 8896111
#[4,] 12317881 14986910