簡體   English   中英

如何修復計算2個坐標之間距離的函數

[英]How to fix function that calculate distance between 2 coordinates

我目前有一列坐標(CHR)以及經度和緯度(NUM)。 我想創建一個函數來查找每兩個坐標之間的距離。 例如第一和第二坐標之間的距離,第二和第三坐標之間的距離,依此類推。 我嘗試了兩種方式來創建它。

data$new.Distance[2:n] <- distm(data$Coord[1:(n-1)], data$Coord[2:n], fun = distMeeus)
data$new.Distance[2:n] <- distm(
    c(data$longitude[1:(n-1)], data$latitude[1:(n-1)]), 
    c(data$longitude[2:n], data$latitude[2:n]), 
    fun = distMeeus
)

我收到錯誤消息:

 ERROR in N-1: non-numeric argument to binary operator. 

我該如何解決? 還是有其他方法可以在R中創建它? 謝謝。

如果您提出問題,請提供示例數據。

p <- rbind(c(0,0),c(90,90),c(10,10),c(-120,-45))
colnames(p) <- c("lon", "lat")
p
#      lon lat
#[1,]    0   0
#[2,]   90  90
#[3,]   10  10
#[4,] -120 -45

要獲得從第一點到第二點,從第二點到第三點的距離,依此類推,您可以

library(geosphere)
distGeo(p)    
#[1] 10001966  8896111 13879039

要么

distMeeus(p)    
#[1] 10001959  8896115 13879009

要獲取所有(經/緯)點到所有點的距離,可以使用geosphere::distm ; 提供選擇的距離函數( distGeo是默認值,也是最准確的)。

library(geosphere)
distm(p, fun=distGeo)
#         [,1]     [,2]     [,3]     [,4]
#[1,]        0 10001966  1565109 12317881
#[2,] 10001966        0  8896111 14986910
#[3,]  1565109  8896111        0 13879039
#[4,] 12317881 14986910 13879039        0

您也可以使用raster::pointDistance

library(raster)
d <- pointDistance(p, lonlat=TRUE)

as.dist(d)
#         1        2        3
#2 10001966                  
#3  1565109  8896111         
#4 12317881 14986910 13879039

也有可能獲得兩組點之間的距離,可能具有不同數量的點。 例如:

pointDistance(p, p[1:2,], lonlat=TRUE)
#         [,1]     [,2]
#[1,]        0 10001966
#[2,] 10001966        0
#[3,]  1565109  8896111
#[4,] 12317881 14986910

暫無
暫無

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

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