Reproyectar ráster en R: ¿advierte que los puntos proyectados no son finitos?

8

1 pregunta

He encontrado una advertencia usando la función projectRaster () en el paquete ráster en R. A continuación se pega un ejemplo reproducible completo.

   Warning message:
   In rgdal::rawTransform(projto_int, projfrom, nrow(xy), xy[, 1],  :
   33940 projected point(s) not finite

Mi pregunta es: ¿Es esta advertencia un problema que debo solucionar si estoy trabajando con datos terrestres? En otras palabras, los datos están "perdidos". Este sería un gran problema para mí si lo es. Si ese es el caso, ¿sabe si hay alguna manera de que pueda solucionarlo?

He buscado una solución a este problema en línea y encontré alguna mención aquí , aquí y aquí, pero creo que ninguna ofrece una respuesta adecuada a este problema.

2. Cargue la biblioteca ráster

  library(raster)

3. Primero cree un mapa (largo lat) del mundo, con una constante en cada celda de la cuadrícula

Estoy poniendo una constante en cada celda de la cuadrícula para ver si puedo diagnosticar el problema de dónde es probable que la advertencia afecte los datos, si es que lo hace.

 rastertest.longlat<-raster(ncol=360, nrow=180)
 values(rastertest.longlat)<-c(rep(1,n=180*360))

4. Si reproyecta el mapa (lat largo) en una cuadrícula de área igual, genera el mensaje de advertencia

   rastertest.eck4<-projectRaster(rastertest.longlat, res=c(100000,100000), crs="+proj=eck4",method="ngb", over=T)

Warning message:
 In rgdal::rawTransform(projto_int, projfrom, nrow(xy), xy[, 1],  :
33940 projected point(s) not finite

Creo que este mensaje básicamente dice que la reproyección falló en algunas de las celdas de la cuadrícula.

5. Pero si traza los dos mapas, no parece que esta advertencia plantee ningún problema para los datos

Es decir, no ve ningún espacio en blanco en los datos trazados. Mi conjetura es que las células perdidas son células no terrestres, en la parte superior y en el límite del mundo. ¿Algunas ideas?

par(mfrow=c(2,1))

plot(rastertest.longlat, col="blue")
data(wrld_simpl)
wrld <- spTransform(wrld_simpl, CRS('+proj=longlat'))
plot(wrld, add=TRUE)

plot(rastertest.eck4, col="blue") 
wrld <- spTransform(wrld_simpl, CRS('+proj=eck4'))
plot(wrld, add=TRUE)

ingrese la descripción de la imagen aquí

Miguel
fuente

Respuestas:

8

Respuesta corta: está bien, y puede agradecerle rasterpor completarla en lugar de fallar, y por hacerle saber que se perdieron algunos datos.

Respuesta larga:

dependerá de la proyección, y en este caso probablemente sea solo en "los bordes". cuál es la ventaja y cómo se manifiesta para una instancia dada de una familia de proyección dada es la parte "depende".

Puede ver que no se pierden los puntos centrales de las celdas:

tpoints <- rgdal::project(coordinates(rastertest.longlat), "+proj=eck4")
sum(is.na(tpoints))
#[1] 0

Pero probablemente sean las esquinas, y posiblemente los bordes de la misma celda. Esto quizás muestra que los proyectos ráster se basan en la extensión de las celdas, no solo en sus puntos centrales.

 rgdal::project(as.matrix(expand.grid(x = c(-180, 0, 180), y = c(-90,0, 90))), "+proj=eck4")

Admito que esperaba que eso fuera de donde provienen los valores faltantes, así que ¿tal vez se projectRasterestá extendiendo un poco más al norte y al sur? Establezca valores allí para la latitud fuera del rango de -90/90 y comience a recibir la advertencia. Seguiré si tengo la oportunidad de explorar más.

Finalmente, probablemente debería usar un elipsoide explícito o un parámetro de referencia, es decir, "+ proj = eck4 + ellps = WGS84".

mdsumner
fuente
¡Gracias! Acabo de restablecer la extensión del ráster original a menos / mayor que +/- 70 grados: rastertest.longlat <- raster (ncol = 4320, nrow = 2160, xmn = -180, xmx = 180, ymn = -70 , ymx = 70) y luego reproyectado usando: rastertest.eck4 <-projectRaster (rastertest.longlat, res = c (100000,100000), crs = "+ proj = eck4, method =" ngb ", over = T). la advertencia desaparece por completo, por lo que creo que todos los valores faltantes deben ocurrir +/- ~ 70 grados.
Mike
@mike Lo siento, pero esta no es una solución aceptable, perder datos e información no es una solución. Qgis y Arcgis pueden hacer esta operación sin problemas, debe haber algún problema con projectRaster. Espero que el desarrollador pueda intervenir.
Herman Toothrot
(-‸ლ) Le invito a que demuestre exactamente qué hacen QGIS y Arc en este caso, especular no es realmente útil. Tenemos acceso a exactamente lo que está sucediendo en R aquí, no hay ningún problema real.
mdsumner el
5

Esta no es una respuesta completa a mi pregunta original, en términos de todos los detalles, pero proporciona al lector interesado un lugar adonde ir.

En general, los datos se pierden y se distorsionan durante la reproyección de rásteres desde proyecciones de longlat a áreas iguales. Esto puede ser problemático para el análisis global. Si puede obtener sus datos en formato vectorial, es mejor volver a proyectar usando ese formato.

Aquí hay una referencia sobre el problema general. Y aquí otro sobre tratar de cuantificar la pérdida. Espero que ayude.

Miguel
fuente