我正在尝试从包含经度和纬度的数据框中创建圆圈,同时考虑到每个圆圈的半径需要精确为 400 海里。有许多点(约 8000 点)对应于世界各地的机场。我一直在使用 sf 包用 st_buffer 创建圆,但是这个函数需要以度为单位的距离参数。我已经看到已解决的问题并不能完全解决我的问题,因为它们涉及可以使用网格的特定位置的单个圆圈。这是我使用的代码:
library(units)
library(tidyverse)
library(sf)
library(mapview)
library(units)
# define nautical miles (as per ICAO notation)
NM <- make_unit("NM")
install_conversion_constant("NM", "km", 1.852)
# Sample data:
df <- data.frame(lon = c(45,47,1, -109), lat = c(7, 10, 59, 30))
# Creating simple features with sf:
df <- df %>% st_as_sf(coords = c("lon", "lat"), dim = "XY")
# Applying Coordinate reference system WGS84:
df <- df %>% st_set_crs(4326)
# Transform to Irish grid - I know this step should be different for
# different parts of the world but I don`t know how to make universal
# solution
df <- st_transform(df$geometry, 29902)
# define radius of interest which is 400 NM
rad <- set_units(400, NM) %>% set_units(km) %>% set_units(m)
# make circles
df_buffer <- st_buffer(df, rad)
# visualise using mapview
mapview(df_buffer)
我需要将这些圆圈作为数据框中的 sf 对象,因为我会将它们用作多边形来查找它们与其他数据框中的空间线(也是 sf)之间的交点。
结果如下 - 三个圆圈大小不同,其中两个扭曲,一个缺失: