获得向量中的点之间的最大距离(R)

时间:2016-03-06 04:48:07

标签: r geospatial euclidean-distance

我有两个纬度和经度的向量。我想找到点之间的最大距离。我看到它的方式,我应该得到所有点之间的距离矩阵,并得到max的那些。

到目前为止,我已经完成了(使用geosphere包作为最后一个命令):

> lat = dt[assetId == u_assetIds[1000], latitude]
> lon = dt[assetId == u_assetIds[1000], longitude]
> 
> head(cbind(lat, lon))
           lat       lon
[1,] 0.7266145 -1.512977
[2,] 0.7270650 -1.504216
[3,] 0.7267265 -1.499622
[4,] 0.7233676 -1.487970
[5,] 0.7232196 -1.443160
[6,] 0.7225059 -1.434848
> 
> distm(c(lat_1K[1], lon_1K[1]), c(lat_1K[4], lon_1K[4]), fun = distHaversine)
         [,1]
[1,] 2807.119

如何将最后一个命令转换为给出所有成对距离的矩阵?我不熟悉R中如何做到这一点,有更多的Python经验。

感谢。

1 个答案:

答案 0 :(得分:1)

只需简要阅读distm的帮助文档,这是我发现的内容:

  

distm(x,y,fun = distHaversine)

     

x:点的经度/纬度。可以是两个数字的向量,2列的矩阵(第一个是经度,第二个是纬度)或SpatialPoints *对象

     

y:与x相同。如果缺少,y与x

相同

所以你应该做的只是输入你的cbind(lat, lon)作为第一个参数x。这是一些测试:

> lat <- c(0.7266145, 0.7270650, 0.7267265, 0.7233676, 0.7232196, 0.7225059)
> lon <- c(-1.512977, -1.504216, -1.499622, -1.487970, -1.443160, -1.434848)
> distm(cbind(lon,lat))
          [,1]      [,2]      [,3]     [,4]      [,5]      [,6]
[1,]    0.0000  976.4802 1486.6045 2806.912 7780.5544 8708.6036
[2,]  976.4802    0.0000  512.7471 1854.601 6809.6464 7738.0538
[3,] 1486.6045  512.7471    0.0000 1349.813 6296.9308 7225.3240
[4,] 2806.9123 1854.6008 1349.8129    0.000 4987.8561 5913.8213
[5,] 7780.5544 6809.6464 6296.9308 4987.856    0.0000  928.6189
[6,] 8708.6036 7738.0538 7225.3240 5913.821  928.6189    0.0000