簡體   English   中英

計算到最近點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。

不幸的是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),然后在定義pp3對象並可以正常工作時將標高附加為z坐標。

reprex軟件包 (v0.2.1)創建於2019-02-12

檢查您的單位。 如果您查看經度值:-103左右,緯度值:32左右,海拔高度:5000、5500、5700。引起距離最多的維度是海拔高度。 由於這些僅相差500和200,因此我不希望距離“更接近6800”。

編輯:也就是說,我相信您的包裹將緯度和經度視為xyz平面上的數字尺寸,而不是實際的緯度和經度!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM