% st_transform(31972) circle_df %-6ren">
gpt4 book ai didi

r - 如何找到半径 250 米附近的位置

转载 作者:行者123 更新时间:2023-12-04 11:50:10 24 4
gpt4 key购买 nike

我有以下数据框:

df <- tribble(~ id,       ~ lon,              ~ lat,
1, -56.2112038, -34.8358207,
2, -55.96403429999999, -34.7260945,
3, -56.155449, -34.9030824,
4, -55.2711453, -34.8665964,
5, -56.210083, -34.865306,
6, -56.0575984, -34.8775368,
7, -54.9485448, -34.9260087,
8, -56.146228, -34.907991,
9, -56.1953583, -34.8643363,
10, -56.1821508, -34.8697975,
11, -56.1498662, -34.8849854,
12, -56.1469807, -34.9119864,
13, -56.155763, -34.9154153,
14, -56.09861610000001, -34.8896448,
15, -56.15526680000001, -34.9189892,
16, -56.0582918, -34.8873091,
17, -54.9529404, -34.9221666,
19, -106.6971588, -35.1366719,
20, -56.1616095, -34.8937622)
我想要实现的是添加一个新列,说明在彼此相距 250 米的半径/距离内有多少个 ID。这个想法是取一行,“查看”坐标,看看该点是否在其他 id 的 250 米半径内以及它们中有多少。

最佳答案

library(tidyverse)
library(sf)
您可能应该将坐标转换为 31972 (拉丁美洲, https://epsg.io/31972)
df_sf <- df %>% 
st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
st_transform(31972)
circle_df <- df_sf %>% st_buffer(250)

df[["close_id"]] <- st_within(df_sf, circle_df) %>% imap(setdiff)
df[["n"]] <- df[["close_id"]] %>% map_int(length)
你可以看到你的点之间的最小距离是:
st_distance(df_sf) %>% .[. > units::set_units(0, "meters")] %>% min()
413.7485 [m]

关于r - 如何找到半径 250 米附近的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68001347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com