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

R语言sf包rbind合并shapefile后无法生成正确多边形问题

目标

制作韦尔梅耶海岸(Vermeille Coast)地图,用于计算两个采样点之间不穿越陆地的路径距离。

规划实现步骤
  • 获取两份海岸shapefile数据
  • 拼接两个MULTILINESTRING/LINESTRING线要素
  • 基于拼接后的线要素生成对应闭合多边形
操作过程与问题

线要素合并

首先读取两份海岸数据,使用rbind直接合并,代码如下:

frenchCoast_CoteBanyuls <- st_read("coasts_subnational/coasts_subnational.shp")
spainCoast_CoteBanyuls <- st_read("coasts_subnational SPAIN/coasts_subnational.shp")

combined_coast <- rbind(spainCoast_CoteBanyuls, frenchCoast_CoteBanyuls) 
plot(combined_coast$geometry)

运行后绘图显示拼接后的海岸线要素显示正常,结果如下:
合并后线要素结果图

合并后多边形生成失败

基于合并后的线要素,尝试用边界框切割提取陆地区域多边形,代码如下:

bbox_combined_coast <- st_bbox(combined_coast) %>% 
  st_as_sfc()

polygon_combined_coast <- bbox_combined_coast %>% 
  lwgeom::st_split(combined_coast) %>% 
  st_collection_extract("POLYGON")

par(mfrow = c(2,4), mar = c(0,0,0,0))
for(i in 1:8){
  plot(polygon_combined_coast[i], col = 'steelblue')
}

运行后共提取出8个多边形,无任何一个与拼接后的海岸轮廓匹配,结果不符合预期:
合并后提取多边形错误结果图

单文件多边形生成对照测试

对两份原始shapefile单独执行完全相同的多边形生成操作,代码如下:

par(mfrow = c(1,2), mar = c(0,0,0,0))

bbox_frenchCoast_CoteBanyuls <- st_bbox(frenchCoast_CoteBanyuls) %>% 
  st_as_sfc()

polygon_frenchCoast_CoteBanyuls <- bbox_frenchCoast_CoteBanyuls %>% 
  lwgeom::st_split(frenchCoast_CoteBanyuls) %>% 
  st_collection_extract("POLYGON")

plot(polygon_frenchCoast_CoteBanyuls[1], col = 'steelblue')

bbox_spainCoast_CoteBanyuls <- st_bbox(spainCoast_CoteBanyuls) %>% 
  st_as_sfc()

polygon_spainCoast_CoteBanyuls <- bbox_spainCoast_CoteBanyuls %>% 
  lwgeom::st_split(spainCoast_CoteBanyuls) %>% 
  st_collection_extract("POLYGON")

plot(polygon_spainCoast_CoteBanyuls[3], col = 'steelblue')

运行得到的两个多边形均与单份shapefile对应的海岸轮廓完全匹配,结果正确:
单文件提取多边形正确结果图

目前判断rbind合并两个shapefile的过程存在非预期问题,需要定位错误原因,获取可行解决方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:51:12