计算到最近点 xyz 坐标的距离
Compute distance to nearest point xyz coordinates
我正在使用 spatstat 包根据 xyz 数据计算与其对应点的最近距离。该代码有效,但我得到的答案不正确。见下文。
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。
检查你的单位。如果您查看经度值:大约 -103,纬度值:大约 32,以及海拔值:5000、5500、5700。导致最大距离的维度是海拔。由于这些仅相差 500 和 200,因此我不希望距离为 "closer to 6800."
编辑:也就是说,我相信您的包裹将您的纬度和经度视为 xyz 平面上的数字维度,而不是实际的纬度和经度!
很遗憾 spatstat
不会自动识别经纬度
坐标。您的点被解释为欧几里德中的 (x,y,z) 坐标
space,三个成对的距离由
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::spTransform
或sf::transform
从球面转换
(lon,lat) 到平面 (x,y),然后您可以将高程附加为 z 坐标
当您定义 pp3
对象时,事情应该会起作用。
由 reprex package (v0.2.1)
创建于 2019-02-12
我正在使用 spatstat 包根据 xyz 数据计算与其对应点的最近距离。该代码有效,但我得到的答案不正确。见下文。
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。
检查你的单位。如果您查看经度值:大约 -103,纬度值:大约 32,以及海拔值:5000、5500、5700。导致最大距离的维度是海拔。由于这些仅相差 500 和 200,因此我不希望距离为 "closer to 6800."
编辑:也就是说,我相信您的包裹将您的纬度和经度视为 xyz 平面上的数字维度,而不是实际的纬度和经度!
很遗憾 spatstat
不会自动识别经纬度
坐标。您的点被解释为欧几里德中的 (x,y,z) 坐标
space,三个成对的距离由
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::spTransform
或sf::transform
从球面转换
(lon,lat) 到平面 (x,y),然后您可以将高程附加为 z 坐标
当您定义 pp3
对象时,事情应该会起作用。
由 reprex package (v0.2.1)
创建于 2019-02-12