簡體   English   中英

計算坐標和參考點之間的距離

[英]Calculating distance between coordinates and reference point

我想計算 lat1、lon1 和參考點(52.92343、5.04127)之間的距離。 我想對數據集中的每一行都這樣做,所以距離將使用每一行中的參考來計算。 這意味着我將創建一個以公里為單位的新列。 我可以想象你將不得不使用某種循環 function,但到目前為止我還沒有想出如何做到這一點。 我想我將不得不使用包geodistgeosphere ,但不幸的是沒有成功。 如何計算這些距離?

structure(list(Day = c("26", "05", "17", "18", "19", "19"), Month = c("07", 
"08", "08", "08", "08", "08"), Year = c("2021", "2021", "2021", 
"2021", "2021", "2021"), Location.Receiver = c("Den Oever Ijsselmeer", 
"Medemblik Ijsselmeer, gemaal", "Den Oever Ijsselmeer", "Den Oever Ijsselmeer", 
"Den Oever Ijsselmeer", "Den Oever Ijsselmeer"), Transmitter = c("A69-1602-59776", 
"A69-1602-59777", "A69-1602-59776", "A69-1602-59776", "A69-1602-59769", 
"A69-1602-59776"), Batch.location = c("Den Oever", "Den Oever", 
"Den Oever", "Den Oever", "Den Oever", "Den Oever"), BatchNr = c(8, 
9, 8, 8, 1, 8), Latitude = c(52.92343, 52.76098, 52.92343, 52.92343, 
52.92343, 52.92343), Longitude = c(5.04127, 5.12172, 5.04127, 
5.04127, 5.04127, 5.04127), Date = structure(c(18834, 18844, 
18856, 18857, 18858, 18858), class = "Date")), row.names = c(1095729L, 
1180267L, 1072657L, 1092667L, 716601L, 1077415L), class = "data.frame")

points_in_circle()從參考點返回給定radius內的點。 以下返回距離參考點 1000km 內的所有點:


library(spatialrisk)
points_in_circle(df, lat_center = 52.92343, lon_center = 5.04127, 
                 lon = Longitude, lat = Latitude, radius = 1e6)
#>         Day Month Year            Location.Receiver    Transmitter
#> 1095729  26    07 2021         Den Oever Ijsselmeer A69-1602-59776
#> 1072657  17    08 2021         Den Oever Ijsselmeer A69-1602-59776
#> 1092667  18    08 2021         Den Oever Ijsselmeer A69-1602-59776
#> 716601   19    08 2021         Den Oever Ijsselmeer A69-1602-59769
#> 1077415  19    08 2021         Den Oever Ijsselmeer A69-1602-59776
#> 1180267  05    08 2021 Medemblik Ijsselmeer, gemaal A69-1602-59777
#>         Batch.location BatchNr Latitude Longitude       Date distance_m
#> 1095729      Den Oever       8 52.92343   5.04127 2021-07-26       0.00
#> 1072657      Den Oever       8 52.92343   5.04127 2021-08-17       0.00
#> 1092667      Den Oever       8 52.92343   5.04127 2021-08-18       0.00
#> 716601       Den Oever       1 52.92343   5.04127 2021-08-19       0.00
#> 1077415      Den Oever       8 52.92343   5.04127 2021-08-19       0.00
#> 1180267      Den Oever       9 52.76098   5.12172 2021-08-05   18875.55

代表 package (v2.0.1) 於 2021 年 12 月 2 日創建

無需循環,您只需使用geodist計算x中坐標數組中的條目與y中單個點之間的距離。 只需將坐標作為 lon/lat 顯式傳遞並作為數字向量保存回Distance ,而不是作為原始矩陣 output。

library(geodist)

df$Distance <- as.numeric(geodist(df[,9:8], c(5.04127, 52.92343)))
#> object has no named columns; assuming order is lon then lat

df$Distance
#> [1]     0.00 18843.92     0.00     0.00     0.00     0.00

請使用sfunits庫查找替代解決方案(參見下面的 reprex)

代表

  • 代碼
library(sf)
library(units)

# Convert the df into 'sf' object
df_sf <- df %>% 
  st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326)

# Create the reference 'sf' object
ref_point_sf <- st_point(c(5.04127, 52.92343)) %>% 
  st_coordinates() %>% 
  as.data.frame() %>% 
  st_as_sf(coords = c("X", "Y"), crs = 4326)

# Compute the distance between the reference point and points from 'df_sf'
results <- st_distance(ref_point_sf, df_sf) %>% 
  set_units("km")
  • Output
results
#> Units: [km]
#>      [,1]     [,2] [,3] [,4] [,5] [,6]
#> [1,]    0 18.85446    0    0    0    0

reprex package (v2.0.1) 於 2021 年 12 月 1 日創建

暫無
暫無

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

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