R语言:如何绘制无人工边界的Shapefile地图?
解决多国边界地图裁剪后内部边界残留问题
问题原因
你当前的代码只是将多个国家的边界要素简单合并(rbind),每个国家仍是独立的多边形要素,绘图时会显示所有要素的边界,包括国家之间的内部国界线;同时直接裁剪会导致每个国家的多边形在裁剪边缘出现人工截断线。
修改后的代码方案
rm(list = ls(all.names = TRUE)) library(raster) library(geodata) # 定义目标显示范围 e <- extent(-76.5, -60.0, -3.0, 3.5) # 批量获取四国边界数据 paises <- c("BRA", "COL", "ECU", "VEN") shps_list <- lapply(paises, function(country) { gadm(country, level=0, path = tempdir(), version="latest", resolution=1) }) # 合并所有边界要素 shps0 <- do.call(rbind, shps_list) # 融合内部边界:将所有国家多边形合并为单一要素,消除国界线 shps_merged <- aggregate(shps0, by = rep(1, nrow(shps0))) # 绘图:用xlim/ylim限定显示范围,保留国家延伸出范围的部分 plot(shps_merged, xlim = c(e@xmin, e@xmax), ylim = c(e@ymin, e@ymax), col = "lightblue", border = "darkgray")
关键说明
- 批量获取数据:用
lapply替代循环,更简洁地批量加载所有国家的边界数据 - 融合内部边界:
aggregate函数通过统一分组ID,将多个国家的多边形合并为单一要素,彻底移除内部国界线 - 保留范围外延伸部分:不使用
crop截断数据,而是通过plot的xlim/ylim参数限定显示区域,既聚焦目标范围,又保留国家超出范围的边界部分,实现连续地图效果
内容的提问来源于stack exchange,提问作者perep1972
相关产品推荐
相关产品推荐

