【问题标题】:R spatstat: Units of distances retrieved by nndistR spatstat:由 nndist 检索的距离单位
【发布时间】:2015-02-12 23:27:34
【问题描述】:

我很惭愧用一个愚蠢(但对我来说非常必要)的问题来打扰你。我有一堆纬度/经度点几乎随机分布在 ca 的一个矩形内。 2 x 3 度(纬度 x 经度)。

我需要计算到第二个最近邻居的最大距离以及到最远邻居的最大距离。我使用包spatstat 计算了这些,

d2 <- max(nndist(data[,2:3], k = 2)
dn <- max(nndist(data[,2:3], k=(nrow(data))-1))

,得到的距离为 0.3 到 4.2。

我需要以公里为单位的这些距离。 所以,我认为nndist 提供的距离以弧度表示。
因此,如果 θ = a /r,其中 θ 是以弧度为单位的对角,a 是弧长,r 是地球半径),那么计算a 的方程变为:a = θr。

但是,以这种方式转换的距离范围为:

a = 6371 * 0.3 = 1911.3,并且

a= 6371 * 4.2 = 2650.2

这显然是错误的;因为使用 Qgis 测量的最远点之间的最大距离仅为 480 公里……

谁能指出我错在哪里?

提前非常感谢!!!

【问题讨论】:

    标签: r distance spatstat


    【解决方案1】:

    nndist 只是计算欧几里得距离。它不进行单位转换。因此,您以“度”为单位赋予了它的值,因此它将返回一个以度为单位的值。 (不是弧度)。

    这样

    6371*0.3*pi/180 = 33.36
    

    将给出这些点之间距离的近似值。

    更好的方法是使用大圆距离(例如在geospheregstat 包中或将纬度/经度坐标投影到适当的地图投影上。(rgdal::spTransform 将这样做)然后 nndist 将以米为单位计算您的距离。

    【讨论】:

    • 非常感谢您的回答@mnel!我的困惑是因为我的地图是投影的。再次感谢!
    • @perep1972 - 你的问题表明你有纬度/经度 - 如果是这种情况,它不会被预测......
    • 但是,有一个错误或者我丢失了一些东西:0.3*pi/180 = 0.005235988 not 33.36
    • 好的!再次感谢@mnel!
    猜你喜欢
    • 2018-12-07
    • 2021-01-09
    • 2013-02-21
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多