使用ggplot与osmdata绘制多边形设置特定坐标范围出现警告问题
警告触发原因
- 当你设置的
coord_sf坐标范围小于目标多边形的实际边界时,ggplot2会自动对几何要素执行裁剪操作 - 若多边形被坐标边界切割,裁剪结果可能生成
GEOMETRYCOLLECTION(混合几何类型集合,可能同时包含多边形碎片、边界线等不同类型的几何要素) geom_sf默认无法直接处理混合类型的几何集合,只会保留集合中的第一个几何元素,因此抛出对应警告- 你放大坐标范围后,整个多边形完全被包含在绘图范围内,不需要执行裁剪操作,几何类型仍为原始的单一
POLYGON,因此不会触发警告
解决方案
你可以任选以下一种方案消除警告:
- 提前对几何对象做合法性校验,避免裁剪时生成混合类型集合
library(sf) loespejo_mersal$osm_polygons <- st_make_valid(loespejo_mersal$osm_polygons)
- 提前手动裁剪并统一几何类型后再绘图
# 手动裁剪+统一转换为多边形类型 cropped_poly <- st_crop(loespejo_mersal$osm_polygons, ymin = -33.54, ymax = -33.50, xmin = -70.71, xmax = -70.67) %>% st_cast("POLYGON") # 绘图时替换数据源即可 ggplot() + geom_sf(data = cropped_poly, inherit.aes = FALSE, fill = "red", size = .1, alpha = .5)+ coord_sf(expand = FALSE)+ labs(title = "TEST Mersan")
- 提取几何集合中的多边形部分,过滤其他类型要素
loespejo_mersal$osm_polygons <- st_collection_extract(loespejo_mersal$osm_polygons, "POLYGON")
内容的提问来源于stack exchange,提问作者Alvaro Fuenzalida
相关产品推荐
相关产品推荐

