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

使用R获取俄罗斯高程数据时出现经度范围错误的问题

问题:获取俄罗斯高程数据时elevatr包报错:经度范围需在-180到180之间?

我尝试获取俄罗斯的高程数据,先通过rgeoboundaries包获取俄罗斯的adm0级边界,再调用elevatr包的get_elev_raster函数获取高程数据,代码如下:

library(rgeoboundaries)
library(elevatr)

russia <- rgeoboundaries::geoboundaries(country = "Russia",adm_lvl = "adm0")
get_elev_raster(russia,z=4)

但运行后返回错误信息:

Error in proj_expand(locations, prj, expand) : 
  The elevatr package requires longitude in a range from -180 to 180.

相同代码在法国、意大利等欧洲国家可正常运行,请问问题出在哪里?


原因分析

俄罗斯跨东西半球,rgeoboundaries返回的边界数据里,远东区域的经度采用了0-360°的东经格式(比如180°以东的区域显示为190°、200°),但elevatr包强制要求经度必须是-180到180°的格式(180°以东需转为-170°、-160°这类负数形式),两者格式不匹配就触发了报错。

而法国、意大利等欧洲国家的经度都在0-180°范围内,不需要转换,所以代码能正常执行。

解决方案

把俄罗斯边界数据的经度从0-360°格式转换为-180到180°格式即可,具体代码如下:

library(rgeoboundaries)
library(elevatr)
library(sf)

# 获取俄罗斯adm0级边界
russia <- rgeoboundaries::geoboundaries(country = "Russia", adm_lvl = "adm0")

# 将经度转换为-180至180的范围
russia_180 <- st_transform(russia, crs = "+proj=longlat +datum=WGS84 +lon_wrap=180")

# 正常获取高程数据
elev_russia <- get_elev_raster(russia_180, z=4)

关键说明

  • 借助sf包的st_transform函数,通过+lon_wrap=180参数自动将大于180°的经度减去360°,转换为符合要求的负数经度。
  • 转换后的边界数据完全适配elevatr的输入要求,能顺利获取高程数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:50:22