使用矩阵的经纬度之间的距离

时间:2018-07-31 16:53:22

标签: r for-loop matrix geospatial euclidean-distance

这是我在矩阵中的数据。很长很长。我想要点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循环正常工作,以及如何将答案添加到矩阵中?

1 个答案:

答案 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

变蓝。

相关问题