我有两个纬度和经度的向量。我想找到点之间的最大距离。我看到它的方式,我应该得到所有点之间的距离矩阵,并得到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经验。
感谢。
答案 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