使用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
相关产品推荐
相关产品推荐

