R使用Eurostat包绘图提示旧版CRS对象的代码修正方法
问题背景
基于R的eurostat包绘制欧洲地图时,代码可正常运行,输出的地图效果符合预期,但运行过程中会持续返回提示信息:
old-style crs object detected; please recreate object with a recent sf::st_crs()
原始运行代码如下:
europe <- eurostat_geodata_60_2016 # basic map ggplot(europe) + geom_sf() + coord_sf(crs = 3035)
问题原因
提示触发的原因是eurostat包内置的示例地理数据eurostat_geodata_60_2016存储时使用了旧版sf包规范的坐标参考系(CRS)对象,新版sf加载这类旧格式对象时就会抛出对应提示。
修正代码
只需要在绘图前对空间对象的CRS按新版规范重建,同时将坐标系统一用st_crs()函数声明即可消除提示,绘图效果和原有代码完全一致:
library(sf) library(ggplot2) library(eurostat) europe <- eurostat_geodata_60_2016 # 按新版sf规范重建空间对象的CRS st_crs(europe) <- st_crs(europe) # 绘制基础地图 ggplot(europe) + geom_sf() + coord_sf(crs = st_crs(3035))
调整说明
- 新增
st_crs(europe) <- st_crs(europe)语句:读取原有空间数据自带的CRS信息,通过新版sf::st_crs()生成符合最新规范的CRS对象重新赋值,从数据源层面消除旧格式CRS问题 - 将
coord_sf()的crs参数从纯EPSG编码数值3035改为st_crs(3035)格式:避免坐标投影转换环节触发旧格式CRS检测
内容的提问来源于stack exchange,提问作者noels
相关产品推荐
相关产品推荐

