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

如何生成与原始LINESTRING等距的3个右侧副本(间距2.5)

生成LINESTRING右侧偏移副本的实现方案

需求描述

现有一段LINESTRING(代码示例如下),需要生成3个位于其右侧的副本,每个副本与原始LINESTRING的垂直间距依次为2.5、5、7.5(相邻副本间的间距也为2.5)。

原始代码

ID <- c(1:5)
long <- c(1,2,3,5,7)
lat <- c(1,4,6,8,9)

a <- data.frame(cbind(ID, long, lat))

line <- a %>%
  st_as_sf(coords = c("long", "lat")) %>%
  dplyr::summarize(do_union=FALSE) %>% 
  st_cast("LINESTRING")

实现步骤与代码

  1. 加载依赖包:需要sf处理空间数据,lwgeom提供线偏移功能,dplyr用于数据整合
library(sf)
library(lwgeom)
library(dplyr)
  1. 生成偏移线:使用lwgeom::st_offsetcurve()函数,正数距离表示向线的右侧偏移(方向由线的顶点顺序决定),依次生成三个不同偏移量的副本
# 生成三个右侧偏移副本,距离原始线分别为2.5、5、7.5
line_offset_2.5 <- st_offsetcurve(line, distance = 2.5)
line_offset_5 <- st_offsetcurve(line, distance = 5)
line_offset_7.5 <- st_offsetcurve(line, distance = 7.5)
  1. 整合所有线到一个SF对象:将原始线和偏移副本合并为单个空间数据框,方便后续查看与处理
# 构建带类型标识的线列表
line_list <- list(
  原始线 = line,
  偏移2.5 = line_offset_2.5,
  偏移5 = line_offset_5,
  偏移7.5 = line_offset_7.5
)

# 合并为统一的sf数据框
all_lines <- bind_rows(
  lapply(names(line_list), function(label) {
    st_sf(类型 = label, geometry = line_list[[label]])
  })
)
  1. 可视化验证:直观查看原始线与偏移副本的位置关系
plot(all_lines$geometry, col = c("black", "red", "blue", "green"), lwd = 2, main = "原始线与右侧偏移副本")
legend("topleft", legend = all_lines$类型, col = c("black", "red", "blue", "green"), lwd = 2)

注意事项

  • 偏移方向由原始LINESTRING的顶点顺序决定,若偏移方向不符合预期,可通过st_reverse(line)反转线的顶点顺序后再执行偏移
  • 若未安装lwgeom包,可通过install.packages("lwgeom")完成安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:30:25