Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Robinson投影中使用tmap绘制全局光栅,而无需重复区域?_R_Raster_Rgdal_Tmap_R Stars - Fatal编程技术网

如何在Robinson投影中使用tmap绘制全局光栅,而无需重复区域?

如何在Robinson投影中使用tmap绘制全局光栅,而无需重复区域?,r,raster,rgdal,tmap,r-stars,R,Raster,Rgdal,Tmap,R Stars,最近我主要使用光栅和tmap绘制了一些全局光栅。我想用罗宾逊投影而不是拉特隆投影来绘制地图。然而,简单的罗宾逊投影复制了地图边缘的一些区域,如下图所示(阿拉斯加、西伯利亚、新西兰) 在此之前,我发现了一种解决方案,使用PROJ.4代码参数“+over”,如和中所述 随着使用GDAL>3和PROJ>=6对rgdal进行的最新更改,此解决方案似乎已经过时。有没有人找到了一种新方法,可以在Robinson/Eckert IV/Mollweide没有重复区域的情况下绘制全局光栅 我在macOS Cata

最近我主要使用光栅和tmap绘制了一些全局光栅。我想用罗宾逊投影而不是拉特隆投影来绘制地图。然而,简单的罗宾逊投影复制了地图边缘的一些区域,如下图所示(阿拉斯加、西伯利亚、新西兰)

在此之前,我发现了一种解决方案,使用PROJ.4代码参数“+over”,如和中所述

随着使用GDAL>3和PROJ>=6对rgdal进行的最新更改,此解决方案似乎已经过时。有没有人找到了一种新方法,可以在Robinson/Eckert IV/Mollweide没有重复区域的情况下绘制全局光栅

我在macOS Catalina 10.15.4上运行R4.0.1、tmap 3.1、stars 0.4-3、光栅3.3-7、rgdal 1.5-12、sp 1.4-2、GDAL 3.1.1和PROJ 6.3.1

require(stars)
require(raster)
require(tmap)
require(dplyr)

# data
worldclim_prec = getData(name = "worldclim", var = "prec", res = 10)
jan_prec <- worldclim_prec$prec1

# to Robinson and plot - projection outputs a warning
jp_rob <- jan_prec %>%
  projectRaster(crs = "+proj=robin +over")
tm_shape(jp_rob) + tm_raster(style = "fisher")

我试着用星星代替光栅做同样的事情,但没有找到分辨率,因为tmap从3.0版开始就使用星星

# new grid for warping stars objects
newgrid <- st_as_stars(jan_prec) %>%
  st_transform("+proj=robin +over") %>%
  st_bbox() %>%
  st_as_stars()

# to stars object - projection outputs no warning
jp_rob_stars <- st_as_stars(jan_prec) %>%
  st_warp(newgrid)

tm_shape(jp_rob_stars) + tm_raster(style = "fisher")

#用于扭曲星体对象的新网格
新电网%
st_变换(“+proj=robin+over”)%>%
st_bbox()%>%
圣亚斯明星酒店
#到星体对象-投影不输出警告
jp_rob_stars%
st_warp(新网格)
tm_形状(jp_rob_星星)+tm_光栅(style=“fisher”)

感谢您的任何见解-希望其他人正在考虑这个问题

使用
光栅
您可以

library(raster)
prec <- getData(name = "worldclim", var = "prec", res = 10)[[1]]
crs <- "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m"
rrob <- projectRaster(prec, crs=crs)

谢谢罗伯特的回答;非常感谢!通过掩蔽的解决方案效果非常好。也许我应该考虑迁移到Terra,如果它将取代光栅在某一点上。
library(raster)
prec <- getData(name = "worldclim", var = "prec", res = 10)[[1]]
crs <- "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m"
rrob <- projectRaster(prec, crs=crs)
library(geosphere)
e <- as(extent(prec), "SpatialPolygons")
crs(e) <- crs(prec)
e <- makePoly(e)  # add additional vertices
re <- spTransform(e, crs)
mrob <- mask(rrob, re)
prec <- getData(name = "worldclim", var = "prec", res = 10)[[1]]
jp <- rast(prec$prec1) 
jp <- jp * 1 # to deal with NAs in this datasaet
rob <- project(jp, crs, mask=TRUE)