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

如何基于两个行数相同的sf对象创建对应行的LineString

解决方法

由于两个sf点对象的行数完全对应,我们可以直接逐对提取点坐标并生成连线,最终得到包含3条LineString的sf对象,以下是两种简单实现方式:

方法1:基础R实现

library(sf)

# 提取两个sf对象的坐标矩阵
coords_x <- st_coordinates(my_x)
coords_y <- st_coordinates(my_y)

# 逐行组合对应点对,创建线要素
lines_list <- mapply(function(x, y) {
  st_linestring(rbind(x, y))
}, split(coords_x, seq(nrow(coords_x))), split(coords_y, seq(nrow(coords_y))))

# 转换为带CRS的sf对象
lines_sf <- st_sfc(lines_list, crs = st_crs(my_x)) %>% st_sf()

方法2:tidyverse工具简化实现

library(sf)
library(purrr)

# 逐对处理两个sf对象的几何要素,生成线集合并转为sf对象
lines_sf <- st_sfc(
  map2(st_geometry(my_x), st_geometry(my_y), 
       ~st_linestring(rbind(st_coordinates(.x), st_coordinates(.y)))),
  crs = st_crs(my_x)
) %>% st_sf()

关键说明

  • 核心逻辑是按行匹配两个对象的点,避免st_union产生的全组合问题
  • 无需复杂空间连接操作,利用行顺序对应关系直接生成目标线
  • 保留原数据的CRS,保证空间坐标的一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:12