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

使用sf绘制跨180°日界线的对象时出现竖线问题

解决跨180°日界线绘图出现竖线的问题

问题根源

跨180°日界线的面要素经st_shift_longitude()转换后,几何会被拆分为跨东西半球的多部分,ggplot绘制时会自动连接不同部分的顶点,从而出现180°位置的竖线。以下是几种可行的解决方法:

方法一:用st_wrap_dateline()拆分跨日界线几何

该函数会将跨180°的几何拆分为多个不跨日界线的独立部分,避免绘图时的错误连线:

library(sf)
library(tidyverse)

# 读取数据
pmnm <- st_read("data/gis/hi_noaa_nwhi_papahanaumokuakea.shp", quiet = TRUE)

# 处理跨日界线几何并转换经度
pmnm_fixed <- pmnm %>%
  st_wrap_dateline(options = c("WRAPDATELINE=YES", "DATELINEOFFSET=180")) %>%
  st_shift_longitude()

# 绘图
ggplot(pmnm_fixed) +
  geom_sf()

方法二:切换到GEOS几何并过滤无效小要素

S2球面几何在这类平面绘图场景中可能出现异常,切换到GEOS后拆分几何,过滤掉跨日界线产生的细长无效部分:

# 切换到GEOS平面几何处理
sf_use_s2(FALSE)

pmnm_fixed <- pmnm %>%
  st_shift_longitude() %>%
  # 将多部分几何拆分为单个多边形
  st_cast("POLYGON") %>%
  # 过滤面积极小的无效要素(阈值可根据数据调整)
  filter(st_area(.) > units::set_units(1, km^2))

ggplot(pmnm_fixed) +
  geom_sf()

方法三:先修复几何有效性再处理

若原始shapefile存在几何无效问题,先修复再处理日界线:

pmnm_fixed <- pmnm %>%
  st_make_valid() %>%
  st_wrap_dateline(options = c("WRAPDATELINE=YES")) %>%
  st_shift_longitude()

ggplot(pmnm_fixed) +
  geom_sf()

内容的提问来源于stack exchange,提问作者Luther Blissett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:10:10