r语言 - 计算到最近点 xyz 坐标的距离



我正在使用spatstat包来计算到基于xyz数据的coorespond点的最近距离。代码有效,但我得到的答案不正确。见下文。

ex<- data.frame(long= c(-103.5664,-103.5664,-103.5586),lat= c(32.09539,32.10129,32.10799),elevation= c(5000,5500,5700))
####bounding box 3D
bb <- box3(range(ex$long), range(ex$lat), range(ex$elevation))
# Create a spatial points data frame:
comp_dist.pp3<- spatstat::pp3(ex$long,ex$lat,ex$elevation,bb)
nndist.pp3(comp_dist.pp3,k=1)
[1] 500 200 200

这些点距离一英里多,所以应该更接近 6800。

不幸的是,spatstat不会自动识别纬度和经度坐标。您的点被解释为 (x,y,z( 欧氏坐标空间,以及由下式测量的三个成对距离 sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)(非常可疑地(是不错的整数 200、500 和 700。这是对原版的小改动用于计算所有成对距离的代码:

library(spatstat)
ex<- data.frame(long= c(-103.5664,-103.5664,-103.5586),
                lat= c(32.09539,32.10129,32.10799),
                elevation= c(5000,5500,5700))
bb <- box3(range(ex$long), range(ex$lat), range(ex$elevation))
comp_dist.pp3<- spatstat::pp3(ex$long,ex$lat,ex$elevation,bb)
pairdist(comp_dist.pp3)
#>      [,1] [,2] [,3]
#> [1,]    0  500  700
#> [2,]  500    0  200
#> [3,]  700  200    0

您可以使用sp::spTransformsf::transform从球形转换(lon,lat( 到平面 (x,y(,然后您可以将高程附加为 z 坐标当您定义pp3对象时,事情应该可以工作。

创建于 2019-02-12 由 reprex 软件包 (v0.2.1(

检查您的单位。如果您查看经度值:所有 -103 左右,纬度值:所有 32 左右,高程值:5000、5500、5700。导致最大距离的维度是高程。由于这些距离仅相差 500 和 200,因此我不希望距离"接近 6800"。

编辑:也就是说,我相信您的软件包将您的纬度和经度视为xyz平面上的数字维度,而不是实际的纬度和经度!

最新更新