You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言创建航道内的非圆形点缓冲区(空间分析)

解决方案:基于航道网络的可达范围缓冲区

核心思路

放弃直接做圆形缓冲区的思路,换两步走:先在航道网络里算出从指定点出发、航行10km能到的所有航道段,再给这些航道段做缓冲区,最后用水陆边界裁剪掉陆地部分,就能得到贴合航道形态的可达水域范围。

具体实现步骤(R语言)

1. 加载必备工具包

用到的都是空间数据和网络分析常用包:

library(sf)          # 空间数据基础处理
library(sfnetworks)  # 空间网络构建与分析
library(tidygraph)   # 网络拓扑计算
library(dplyr)       # 数据筛选与处理

2. 把航道转成可分析的空间网络

先把你的航道线数据转成带拓扑关系的空间网络,同时计算每条航道段的实际长度(用来算航行距离):

# 假设你的航道线数据是sf格式,命名为waterway_lines
waterway_net <- as_sfnetwork(waterway_lines, directed = FALSE) %>%
  activate("edges") %>%
  mutate(length = st_length(.))  # 给每条航道段加上长度属性

3. 把指定点锚定到航道网络上

如果你的起点不在航道上,先找到它在航道网络里的最近节点,作为航行的实际起点:

# 假设指定点是sf格式,命名为start_point
nearest_node_idx <- st_nearest_feature(start_point, waterway_net %>% activate("nodes"))
start_node <- waterway_net %>% activate("nodes") %>% slice(nearest_node_idx)

4. 筛选10km内可达的航道段

用网络距离算法,找出从起点出发,累计航行距离不超过10km的所有航道段:

# 计算所有节点到起点的累计航行距离,筛选出≤10km的节点,再关联对应的航道段
reachable_edges <- waterway_net %>%
  activate("nodes") %>%
  mutate(
    dist_from_start = node_distance_from(start_node$nodeID, weights = length),
    is_reachable = dist_from_start <= units::set_units(10, km)
  ) %>%
  activate("edges") %>%
  filter(from %in% which(.$nodes$is_reachable) | to %in% which(.$nodes$is_reachable))

5. 生成航道缓冲区并裁剪

把可达航道提取出来做缓冲区,再用水陆边界去掉陆地部分:

# 提取可达航道的线要素
reachable_waterways <- as_sf(reachable_edges)
# 生成缓冲区,宽度可根据实际航道宽度调整(比如设为50米)
raw_buffer <- st_buffer(reachable_waterways, dist = units::set_units(50, m))

# 假设水陆边界是sf面数据,其中水域标记为type="water"
water_area <- land_water_boundary %>% filter(type == "water")
# 裁剪缓冲区,只保留水域内的部分
final_buffer <- st_intersection(raw_buffer, water_area)

6. 可视化验证结果

plot(st_geometry(land_water_boundary), col = "gray90", border = NA)
plot(st_geometry(final_buffer), col = "lightblue", add = TRUE)
plot(st_geometry(start_point), col = "red", pch = 19, cex = 1.2, add = TRUE)

注意事项

  • 如果航道数据有断裂、不连通的情况,先做拓扑修复(比如用st_union合并相邻线段),否则会漏算可达范围。
  • 确保所有距离单位统一(比如都转为千米),避免计算出错。
  • 缓冲区宽度可以根据实际航道的宽窄灵活调整,让结果更贴合真实水域。

内容的提问来源于stack exchange,提问作者colebrookson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:15:12