R语言为栅格设置投影时出现CRS错误应如何解决?
问题原因与解决方法
该问题不是由你的原始数据错误引发的,是投影赋值的写法版本兼容问题、空间对象转换过程中投影信息丢失共同导致的,具体修复步骤如下:
报错核心原因
Error in CRS(SRS_string = x) : NA报错是因为raster/rgdal包的较新版本,不支持直接将"epsg:2193"字符串赋值给crs参数,解析时会识别为无效值返回NA- 你将空间对象转换为spatstat的ppp类时,ppp对象本身不会保留原始投影信息,哪怕后续补加CRS,栅格的坐标范围也会和实际位置不匹配,最终导致地图位置错误
修复步骤
- 首先统一所有原始空间数据的投影为EPSG:2193,避免后续坐标偏移
# 确认原始数据为sf/sp格式,先统一投影 library(sf) crashes_TA <- st_transform(crashes_TA, 2193) TA <- st_transform(TA, 2193)
- 转换为栅格后,用PROJ4字符串直接赋值CRS,避免EPSG解析错误
# 转换为raster格式后执行这行代码赋值投影,替换你原有crs赋值行 crs(crashes.kd1) <- "+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
- 如果要在tmap的交互式view模式下正常显示,需要把栅格转成底图默认的web墨卡托投影
crashes.kd1_web <- projectRaster(crashes.kd1, crs = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs")
验证方法
直接用tmap绘制栅格,确认是否和底图位置对齐:
tmap_mode("view") tm_shape(crashes.kd1_web) + tm_raster(alpha = 0.6, palette = viridis::viridis(10, option = "B", direction = -1))
内容的提问来源于stack exchange,提问作者scumbagsurfer
相关产品推荐
相关产品推荐

