我需要将西半球的秘鲁SpatialPolygonsDataFrame经度(-81.3307,-68.65311)覆盖在一个大的气候数据RasterBrick(dim = 721 1440 14610)经度(-0.125,359.875)上。当然这是不可能的,因为shapefile是大西洋视图,而rasterbrick是太平洋视图。
我首先尝试使用 rotate()
来重新定位栅格砖在大西洋视图上的位置,但这是不可能耗费时间的。
然后我发现 recenter()
来自 sp
包。这样做是可行的;新的秘鲁形状文件是太平洋视图。然而,这只是一个SpatialPolygons -- 它丢失了我在Peru的SpatialPolygonsDataFrame中的数据。有什么办法可以保留这些数据,或者有其他类似的功能可以保留这些数据吗?
如果你想留在 sp
并使用 recenter()
我认为唯一的方法是将data.frame复制回输出的SpatialPolygons。像这样的。
peru_pac <- recenter(peru_atl)
peru_pac_spdf <- SpatialPointsDataFrame(peru_pac, peru_atl@data)
但我也建议使用较新的 sf
包来代替。如果你已经有一个 SpatialPolygonsDataFrame 对象,那么很容易通过使用 sfobject <- st_as_sf(spdataframe)
,然后用 st_shift_longitude
. 如果你需要转换回 sp
对象,你可以用 spdataframe <- as(sfobject, "Spatial")
.
您可以考虑使用 sf
包,它将对象处理为空间数据框架(如geopandas)。函数 st_shift_longitude()
等于 recenter()
在sp.
文件 - https:/www.rdocumentation.orgpackagessfversions0.9-2topicsst_shift_longitude