这是我在矩阵中的数据。很长很长。我想要点1和2、2和3、3和4等之间的距离。
> mat<-as.matrix(b)
> mat
buoy.LON buoy.LAT
[1,] -86.34816 43.19014
[2,] -86.34337 43.18656
[3,] -86.34013 43.18268
[4,] -86.33468 43.17484
[5,] -86.33091 43.16549
[6,] -86.32912 43.15925
[7,] -86.32786 43.14887
dis<-distGeo(mat[2,],mat[3,]) #distance in meters
did
[1] 505.1605
上面的公式很好用,但是我想做一个循环来快速地做到这一点,并且希望将数据添加到矩阵中。
我创建了这个循环
for (i in mat[1:169,]) {
distGeo(mat[i,], mat[i+1,])
}
但我总是得到
的回报 196
如何使for循环正常工作,以及如何将答案添加到矩阵中?
答案 0 :(得分:0)
在安阿伯(Ann Arbor ey)?我倾向于帮助。
看起来distgeo可以完全完成您想要的操作而无需循环。
distGeo(p1,p2,a = 6378137,f = 1 / 298.257223563)
参数
p1 点的经度/纬度。可以是两个数字的向量,也可以是2列的矩阵(第一列是经度,第二列是纬度)或SpatialPoints *对象
所以...
distGeo(mat)
#[1] 556.6029 505.1605 977.2286 1083.0404 708.3580 1157.7188
并将其作为一列添加到矩阵中,您需要为第一个插槽(或最后一个插槽,取决于要表示距离的点)添加空白:
geodists <- distGeo(mat)
mat <- cbind(mat, dists = c(NA,geodists))
mat
# dists
#[1,] -86.34816 43.19014 NA
#[2,] -86.34337 43.18656 556.6029
#[3,] -86.34013 43.18268 505.1605
#[4,] -86.33468 43.17484 977.2286
#[5,] -86.33091 43.16549 1083.0404
#[6,] -86.32912 43.15925 708.3580
#[7,] -86.32786 43.14887 1157.7188
变蓝。