Comprender el error al cambiar la proyección de SpatialPolygon (R)
Estoy encontrando un error que no entiendo. Quiero cambiar la proyección de un SpatialPolygonsDataFrame de +longlat a Mollweide o Robinson. Para esto estoy tratando de usar spTransform(), pero devuelve el error: "Error en .spTransform_Polygon(input[[i]], to_args = to_args, from_args = from_args, : falla en Polygons 125 Polygon 1 puntos 1:4: 5"
Mi pregunta: ¿Por qué me sale este error?
Aquí hay un MWE:
library(inlmisc)
library(sp)
projection <- "+proj=robin +datum=WGS84 +lat_0=0 +lon_0="
numlons <- 30
numlats <- 50
lat.df <- rep(seq(from=-90, to=90, length.out = numlats), each=numlons)
lon.df <- rep(seq(from=-180, to=180, length.out = numlons), times=numlats)
spobj <- as.vector(array(data=rnorm(n=50*30, mean=0, sd=1)))
spobj <- data.frame("dat"=spobj)
spobj <- SpatialPointsDataFrame(coords=data.frame("longs"=c(lon.df), "lats"=lat.df),
data=spobj,
proj4string=CRS("+proj=longlat"))
sp::gridded(spobj) <- TRUE
spobj <- as(spobj, "SpatialGridDataFrame")
### Change projection
spobj <- Grid2Polygons(grd=spobj, zcol="dat", cuts=100) # convert to SpatialPolygon
spobj <- spTransform(spobj, CRS(projection)) # change projection
Respuestas
Las celdas de la cuadrícula están fuera del rango válido para los datos de latitud y longitud. Cuando spobjes puntos (antes sp::gridded(spobj) <- TRUE) es esto:
> spobj.pts
class : SpatialPointsDataFrame
features : 1500
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +ellps=WGS84
variables : 1
names : dat
min values : -3.85401447598915
max values : 3.65817120357171
pero despues Grid2Polygonses esto:
> spobj
class : SpatialPolygonsDataFrame
features : 1470
extent : -186.2069, 186.2069, -88.16327, 91.83673 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +ellps=WGS84
que tiene latitud más allá del polo norte (+90) y longitudes más allá del antimeridiano (180 o -180). Esto se debe a que las celdas de la cuadrícula Grid2Polygonsestán centradas en los puntos. También hay menos de ellos. Parece que no le molesta hacer cuadrículas desde la fila inferior:
Entonces parece que eso es lo que Grid2Polygonshace, y no estoy seguro de si eso es lo que se supone que debe hacer o no (los documentos son vagos) o qué es exactamente lo que quiere hacer para hacer celdas poligonales a partir de sus puntos. Pero el problema básico es que no puedes proyectar coordenadas que no son válidas.