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

geom_sf与ggplot问题:正射投影下部分多边形(国家)消失

解决正射投影下geom_sf多边形消失问题

问题原因

正射投影(ortho)是半球视角的投影,任何完全处于视野半球外的多边形,或者**跨越投影视野边界(如180°经线)**的多边形,经过st_transform转换后会变成无效几何(自相交、空几何等),而geom_sf默认不会绘制无效/空几何,导致国家“消失”。

解决方案

通过拆分跨边界多边形+修复无效几何的组合操作,保留所有可显示的几何部分:

步骤1:拆分跨日界线多边形

用st_wrap_dateline把跨180°经线的多边形拆分为多个独立部分,避免投影时产生无效几何:

library(tidyverse)
library(sf)
data("World")

# 拆分跨日界线的国家多边形
World_processed <- World %>%
  st_wrap_dateline(options = c("WRAPDATELINE=YES", "DATELINEOFFSET=180"))

步骤2:投影+修复几何

投影后用st_make_valid修复无效几何,再过滤掉完全在视野外的空几何:

# 正射投影(默认视角)
World_processed %>%
  st_transform("+proj=ortho") %>%
  st_make_valid() %>%
  filter(!st_is_empty(.)) %>%
  ggplot() +
  geom_sf(aes(fill = life_exp))

# 正射投影(纬度40°视角)
World_processed %>%
  st_transform("+proj=ortho +lat_0=40") %>%
  st_make_valid() %>%
  filter(!st_is_empty(.)) %>%
  ggplot() +
  geom_sf(aes(fill = life_exp))

补充说明

  • st_wrap_dateline专门处理跨日界线的多边形,确保每个子多边形都在±180°经度范围内,避免投影时出现几何异常。
  • st_make_valid能修复投影过程中产生的自相交、重叠等无效几何问题,保证geom_sf可以正常绘制。
  • filter(!st_is_empty(.))会剔除完全处于视野半球外的国家(比如当视角在北半球时,部分南半球国家可能完全不可见),这是正常的投影特性。

内容的提问来源于stack exchange,提问作者Mark R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:10