即使具有相同的 CRS,多边形也会向栅格的北部移动
Polygons shifted north of raster even with same CRS
我遇到了麻烦。在 tmaps 中使用相同的 CRS 绘制 SpatialPixelDataframe
和 SpatialPolygonDataframe
时,我无法确定问题。
可以找到 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
。
我遇到了麻烦。在 tmaps 中使用相同的 CRS 绘制 SpatialPixelDataframe
和 SpatialPolygonDataframe
时,我无法确定问题。
可以找到 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
。