我能够使用包
sp
在多边形内生成随机点,但是我对沿着多边形轮廓生成点感兴趣。
例如,如果我有一个湖泊的 shapefile,我可以使用
spsample(lake,n=10,type="random")
在该湖内生成 10 个随机位置。我想做类似的事情,但我不想生成湖内的位置,而是希望这些点只是沿着海岸线。有没有一种简单的方法可以做到这一点,我只是想念?
如果你愿意使用
sf
包,你可以使用st_sample
功能。技巧是首先将多边形转换为线,然后对点进行采样。
library(sf)
#> Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(ggplot2)
set.seed(415)
# read polygon shapefile
nc_p <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)[1, 1]
# Convert to line
nc_l <- st_cast(nc_p, 'MULTILINESTRING')
# sample points along line
nc_s <- st_sample(nc_l, 10)
#> although coordinates are longitude/latitude, st_sample assumes that they are planar
ggplot() +
theme_void() +
geom_sf(data = nc_p, fill = 'grey') +
geom_sf(data = nc_l, color = 'red') +
geom_sf(data = nc_s, color = 'blue')
由 reprex 包于 2021-08-30 创建(v2.0.0)
这也相当于ArcGIS中的“沿线生成点” - 然而这个R答案很难通过谷歌搜索找到 - 请是否可以改写或添加到问题