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

使用ggplot与osmdata绘制多边形设置特定坐标范围出现警告问题

警告触发原因
  • 当你设置的coord_sf坐标范围小于目标多边形的实际边界时,ggplot2会自动对几何要素执行裁剪操作
  • 若多边形被坐标边界切割,裁剪结果可能生成GEOMETRYCOLLECTION(混合几何类型集合,可能同时包含多边形碎片、边界线等不同类型的几何要素)
  • geom_sf默认无法直接处理混合类型的几何集合,只会保留集合中的第一个几何元素,因此抛出对应警告
  • 你放大坐标范围后,整个多边形完全被包含在绘图范围内,不需要执行裁剪操作,几何类型仍为原始的单一POLYGON,因此不会触发警告
解决方案

你可以任选以下一种方案消除警告:

  1. 提前对几何对象做合法性校验,避免裁剪时生成混合类型集合
library(sf)
loespejo_mersal$osm_polygons <- st_make_valid(loespejo_mersal$osm_polygons)
  1. 提前手动裁剪并统一几何类型后再绘图
# 手动裁剪+统一转换为多边形类型
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")
  1. 提取几何集合中的多边形部分,过滤其他类型要素
loespejo_mersal$osm_polygons <- st_collection_extract(loespejo_mersal$osm_polygons, "POLYGON")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:03