簡體   English   中英

R 如何計算具有經度和緯度的幾個點之間的距離(以公里為單位)

[英]R how to calculate the distance in km between several points that have long and lat

我有三個點,經度和緯度(三個島,見下面的矩陣),我想計算它們之間的距離(以公里為單位)。 這是我的矩陣(list1):

list1 <- data.frame(longitude = c(-3.0000,
                                   -1.3333,
                                   -6.5667), 
                     latitude = c(59.0000, 
                                  60.3333,  
                                  62.2500),
                      name= c('Orkney', 
                            'Shetlands', 
                               'Faroe'))

我只想知道法羅群島和設得蘭群島之間的距離,設得蘭群島和奧克尼群島之間的距離等等......我是R的初學者所以我對語言不熟悉......可以誰來幫幫我?

您正在尋找的是距離矩陣。 可以用geodist package 來完成

library(geodist)

distance_matrix <- geodist(list1, measure = 'geodesic' )/1000 #converting it to km

#also, check for other measures in the description

colnames(distance_matrix) <- list1$name
rownames(distance_matrix) <- list1$name

Output:

            Orkney Shetlands    Faroe
Orkney      0.0000  175.7363 411.2688
Shetlands 175.7363    0.0000 352.4388
Faroe     411.2688  352.4388   0.0000

這是兩種可能的解決方案:

list1 <- data.frame(longitude = c(-3.0000,
                                  -1.3333,
                                  -6.5667), 
                    latitude = c(59.0000, 
                                 60.3333,  
                                 62.2500),
                    name= c('Orkney', 
                            'Shetlands', 
                            'Faroe'))
require(sf)
#> Loading required package: sf
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
st_distance(st_as_sf(list1, coords = 1:2, crs=4326))
#> Units: [m]
#>          [,1]     [,2]     [,3]
#> [1,]      0.0 175316.8 410279.5
#> [2,] 175316.8      0.0 351338.2
#> [3,] 410279.5 351338.2      0.0
require(geosphere)
#> Loading required package: geosphere
do.call(rbind,lapply(split(list1[,1:2],1:3), distHaversine, p2=list1[,1:2]))
#>       [,1]     [,2]     [,3]
#> 1      0.0 175512.9 410738.5
#> 2 175512.9      0.0 351731.2
#> 3 410738.5 351731.2      0.0

reprex package (v2.0.1) 創建於 2021-09-30

這里coords=1:2表示包含經度和緯度的列,這也可以通過名稱完成更多詳細信息,請參閱?st_as_sfcrs=4326代表使用的坐標參考系統(epsg 代碼: https://epsg.io/ 4326 )。 st_distance自動附加單位。 如果您想要不同的單位,單位 package 有如何轉換為不同單位的示例。

第二個例子稍微沒那么花哨,只適用於長緯度數據,因為它使用distHaversine (geosphere 包含替代距離函數)。 lapply用於每次計算一個坐標和所有其他坐標之間的距離。

rownamescolnames可用於再次附加名稱。 坐標保持相同的順序。

暫無
暫無

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

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