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

R语言sf包EPSG3310投影正常,自定义正射投影报几何无效错误如何解决

R中正射投影绘制地图无效几何报错的原因与解决方案

错误根因

  • 正射投影(+proj=ortho)属于方位投影,仅支持展示投影中心所在的半个地球,落在另一半球的矢量要素在投影转换环节会被裁剪,裁剪过程极易生成不符合几何规范的无效对象:例如原本的闭合多边形裁剪后仅残留2个顶点的线段,无法满足多边形闭合环至少需要4个顶点的要求,因此触发GEOS校验报错。
  • 此前使用的EPSG:3310是针对美国加利福尼亚州设计的阿尔伯斯等面积投影,你的所有数据都落在该投影的有效覆盖范围内,投影转换不会产生无效几何,因此运行正常。

修复方案

你可以按以下步骤修改代码即可正常渲染:

  1. 先完成投影转换,主动修复、过滤无效几何
    调整后的代码如下:
library(sf)
library(ggplot2)
library(dplyr)

world <- st_read("world_map_path.shp")
syear <- st_read("data_path.shp")
proj <- "+proj=ortho +lon_0=35 +lat_0=90"

# 预处理全球底图:投影转换→修复无效几何→过滤空几何
world_proj <- st_transform(world, crs = proj) %>% 
  st_make_valid() %>% 
  filter(!st_is_empty(.))

# 预处理业务数据,逻辑同上
syear_proj <- st_transform(syear, crs = proj) %>% 
  st_make_valid() %>% 
  filter(!st_is_empty(.))

ggplot(data = world_proj) + 
  geom_sf() + 
  geom_sf(data = syear_proj, aes(fill = owner), size = 0.2) +
  coord_sf(crs = proj)
  1. 若仍报错可在st_read读取原始数据后先执行一次st_make_valid(),消除原始数据本身存在的隐性几何问题。
  2. 低版本sf可额外关闭coord_sf的自动裁剪逻辑,添加参数:coord_sf(crs = proj, lims_method = "geometry_bbox")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:07