在R语言中如何在Shapefile限定区域生成地理参考随机/等距点
在Shapefile划定区域内生成地理参考点的R实现
准备工作
先加载处理空间数据的核心包,读入你的湖泊Shapefile:
library(sf) library(raster) # 替换成你的湖泊Shapefile路径 lake_shp <- st_read("path/to/your/lake.shp")
生成均匀随机分布点
用sf包的st_sample就能直接生成,支持指定点数或按密度生成:
# 生成固定数量的随机点(比如200个) random_points <- st_sample(lake_shp, size = 200, type = "random") # 或者按密度生成(比如每平方公里1个点) lake_area_sqkm <- as.numeric(st_area(lake_shp) / 1000000) random_points_density <- st_sample(lake_shp, size = lake_area_sqkm, type = "random") # 转成可编辑的sf数据框格式 random_points_sf <- st_sf(geometry = random_points)
生成每公里间隔的等距网格点
关键是先把坐标系转成米为单位的投影坐标系(比如UTM),不然没法用公里做间隔:
# 自动匹配湖泊所在的UTM投影带 utm_zone <- floor((st_bbox(lake_shp)[1] + 180)/6) + 1 proj_utm <- paste0("+proj=utm +zone=", utm_zone, " +datum=WGS84 +units=m") lake_utm <- st_transform(lake_shp, crs = proj_utm) # 创建1公里间隔的网格点矩阵 bbox <- st_bbox(lake_utm) grid_matrix <- expand.grid( x = seq(bbox[1], bbox[3], by = 1000), # x轴每1000米一个点 y = seq(bbox[2], bbox[4], by = 1000) # y轴每1000米一个点 ) # 转成sf对象并筛选落在湖泊内的点 grid_sf <- st_as_sf(grid_matrix, coords = c("x", "y"), crs = proj_utm) grid_in_lake <- st_filter(grid_sf, lake_utm) # 转回原始坐标系(比如经纬度WGS84) grid_in_lake_wgs84 <- st_transform(grid_in_lake, crs = st_crs(lake_shp))
额外提示
- 如果你的Shapefile里有多个湖泊,先筛选出目标湖泊再操作:
target_lake <- lake_shp[lake_shp$lake_name == "你的目标湖泊", ] - 生成的点可以用
st_write导出为Shapefile:st_write(grid_in_lake_wgs84, "lake_grid_points.shp")
内容的提问来源于stack exchange,提问作者Francisco Borges
相关产品推荐
相关产品推荐

