【问题标题】:Get maximum distance between points in a vector (R)获取向量中点之间的最大距离 (R)
【发布时间】:2016-03-06 04:48:07
【问题描述】:

我有两个纬度和经度向量。我想找到点之间的最大距离。在我看来,我应该得到一个所有点之间的距离矩阵并得到其中的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 方面有更多经验。

谢谢。

【问题讨论】:

    标签: r geospatial euclidean-distance


    【解决方案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
    

    【讨论】:

    • @Buckminster 我对这个包不是很熟悉,但是当我做distm(lon, lat) 时我得到了这个错误 .pointsToMatrix(x) 中的错误:向量的长度错误,应该是 2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多