如何基于两个行数相同的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
相关产品推荐
相关产品推荐

