[英]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_sf
, crs=4326
代表使用的坐標參考系統(epsg 代碼: https://epsg.io/ 4326 )。 st_distance
自動附加單位。 如果您想要不同的單位,單位 package 有如何轉換為不同單位的示例。
第二個例子稍微沒那么花哨,只適用於長緯度數據,因為它使用distHaversine
(geosphere 包含替代距離函數)。 lapply
用於每次計算一個坐標和所有其他坐標之間的距離。
rownames
和colnames
可用於再次附加名稱。 坐標保持相同的順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.