即使具有相同的 CRS,多边形也会向栅格的北部移动

Polygons shifted north of raster even with same CRS

我遇到了麻烦。在 tmaps 中使用相同的 CRS 绘制 SpatialPixelDataframeSpatialPolygonDataframe 时,我无法确定问题。

可以找到 spatialpixels 对象 here saved as RDS, and the polygons shapefile here,已压缩。

这是我对基本函数的尝试:

library(sf)
library(sp)
ireland <- st_read("Counties.shp") 
sp_pred <- readRDS("sppred_range100_sd2.RDS")

#transform polygons into the pixels CRS
ireland_proj <- st_transform(ireland, sp_pred@proj4string)

#turn into sp object
ireland_sp <- as_Spatial(ireland_proj)

#plot with base functions
plot(sp_pred['mean'])
plot(ireland_sp, add = T)

这是我对 tmap

的尝试
library(tmap)
tm_shape(sp_pred) +
  tm_raster("mean", palette = terrain.colors(10)) +
  tm_shape(ireland_sp) +
  tm_borders("black", lwd = .5) +
  tm_legend(show = FALSE)

这太简单了,我看不出我可能哪里出错了,而且我也看不出 tmap 的工作方式怎么会出错!

正如@krenz 提到的,您在这里一起使用了不同的 类,但是,我不完全确定是什么原因导致了问题。

这里有一个解决方法,首先将您的数据转换为 sf 对象,然后使用 st_rasterize 对其进行光栅化。结果与您显示的结果略有不同。也许您需要稍微调整一下分辨率参数:

library(tmap)
library(sf)

ireland <- st_read("counties/counties.shp") 
sp_pred <- readRDS("sppred_range100_sd2.RDS")

sp_pred_proc <- sp_pred %>% st_as_sf()
sp_pred_proc <- st_rasterize(sp_pred_proc["mean"], dx = 5000, dy = 5000)

tm_shape(sp_pred_proc) +
  tm_raster("mean", palette = terrain.colors(10)) +
  tm_shape(ireland) +
  tm_borders("black", lwd = .5) +
  tm_legend(show = FALSE)

左边的图是用上面给出的设置生成的,右边的是dx = 6000, dy = 6000