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

使用sf包st_crop与极投影后,北亚区域出现异常竖线问题咨询

解决sf包极投影后北亚区域地图异常竖线问题

问题根源:关闭S2球面几何支持(sf_use_s2(FALSE))后,st_crop采用平面几何逻辑处理跨180°经线的区域(如北亚部分),导致多边形拓扑错误,转换到正射极投影后出现异常竖线。

方案1:启用S2球面几何处理裁剪

利用S2的球面空间运算,正确处理跨180°经线的裁剪操作:

library(sf)
library(maps)

# 启用S2球面几何支持(默认已开启,此处明确设置)
sf_use_s2(TRUE)

# 加载世界地图并转换为WGS84坐标系
world1 <- sf::st_as_sf(map('world', plot = FALSE, fill = TRUE)) |>
  st_transform(crs = 4326)

# 定义北纬60度以上的裁剪范围
bbox <- st_bbox(c(xmin = -180, ymin = 60, xmax = 180, ymax = 90), crs = 4326)

# 裁剪后转换到正射极投影并绘图
st_crop(world1, bbox) |>
  st_transform(crs = "+proj=ortho +lat_0=90 +lon_0=0") |>
  plot()

方案2:先投影再裁剪

避免在WGS84平面裁剪跨经线区域,先转换到极投影再进行裁剪:

library(sf)
library(maps)

# 加载世界地图并转换为WGS84坐标系
world1 <- sf::st_as_sf(map('world', plot = FALSE, fill = TRUE)) |>
  st_transform(crs = 4326)

# 定义正射极投影
ortho_crs <- "+proj=ortho +lat_0=90 +lon_0=0"

# 先将地图转换到极投影
world_ortho <- st_transform(world1, crs = ortho_crs)

# 计算极投影下对应北纬60度的边界坐标
lat60_point <- st_sfc(st_point(c(0, 60)), crs = 4326) |>
  st_transform(ortho_crs)
lat60_coords <- st_coordinates(lat60_point)[1, ]

# 定义极投影下的裁剪范围
bbox_ortho <- st_bbox(c(xmin = -lat60_coords[1], ymin = -lat60_coords[2], 
                         xmax = lat60_coords[1], ymax = lat60_coords[2]), 
                       crs = ortho_crs)

# 裁剪并绘图
st_crop(world_ortho, bbox_ortho) |>
  plot()

两种方案都能解决异常竖线问题,方案1更简洁,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:03:13