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

如何将MultiLineString合并为LineString以在sf中生成规则采样点?

在R的sf包中处理MultiLineString的规则采样点生成

情况1:MultiLineString的子线段连通

如果你的MultiLineString由连通的子线段组成,直接用st_line_merge()合并为单个LineString,就能按总长度均匀生成采样点,这和QGIS重绘的效果一致:

# 合并连通的MultiLineString为单一LineString
single_line <- st_line_merge(your_multi_line_data)

# 生成指定数量的规则采样点(示例为15个)
sample_points <- st_line_sample(single_line, n = 15)

# 转换为sf点对象便于后续操作
sample_points_sf <- st_sf(geometry = sample_points)

情况2:MultiLineString的子线段不连通

如果子线段不连通,无法合并为单个LineString,可按各线段长度比例分配采样数量,再合并结果:

  1. 拆分MultiLineString为单个LineString对象:
line_segments <- st_cast(your_multi_line_data, "LINESTRING")
  1. 计算长度并分配采样数:
# 计算每条线段的长度
seg_lengths <- st_length(line_segments)
total_len <- sum(seg_lengths)

# 设定总采样数
total_samples <- 20

# 按长度比例分配采样数,调整确保总数匹配
sample_nums <- round((seg_lengths / total_len) * total_samples)
sample_nums[1] <- sample_nums[1] + (total_samples - sum(sample_nums))
  1. 批量采样并合并:
# 逐个线段生成采样点
sample_list <- lapply(seq_along(line_segments), function(i) {
  st_line_sample(line_segments[i], n = sample_nums[i])
})

# 合并所有采样点
all_samples <- do.call(c, sample_list)
all_samples_sf <- st_sf(geometry = all_samples)

内容的提问来源于stack exchange,提问作者M. Beausoleil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:03