3 votos

Guardar marco de datos de píxeles espaciales

Me he encontrado con un pequeño pero desconcertante problema a la hora de guardar y leer el marco de datos de píxeles espaciales.

He creado una trama con más de 10 millones de cuadrículas (resolución = 25000).

adm0 <- readOGR(dsn = path.expand("C:/Users/Abel/Desktop/district"),
                layer = "administrative0")

proj.crs <- proj4string(CRS("+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"))

adm0.newproj <- spTransform(adm0, proj.crs)

grid_2.5km <- raster(adm0.newproj, res = 2500)  # 13143792 grids

Para añadir datos al raster, transformé este raster en SpatialPixelsDataFrame (No he utilizado SpatialPolygons porque mi ordenador es incapaz de manejar un vector de este tamaño).

grid_2.5km[]<- 1:ncell(grid_2.5km)

grid_2.5km.sp <- as(grid_2.5km, "SpatialPolygonsDataFrame")

Al principio utilicé writeOGR para guardar este archivo de cuadrícula y readOGR para leerlo. Pero resulta que al hacerlo todas las cuadrículas se transformarían en SpatialPoint que definitivamente no es lo que quiero.

También probé writeGDAL . Pero no tengo ni idea del conjunto el filename , drivername , type y muchos otros parámetros.

writeGDAL(grid_2.5km.sp, "C:/Users/Abel/Desktop/divide/grid_2.5km.tif", 
          drivername = "Gtiff", type = "Float32" )

¿Cómo puedo guardar este SpatialPixelsDataFrame correctamente y mantener su objeto original, y cómo debo leer este archivo, dejando que el archivo abierto siga teniendo el objeto como SpatialPixelsDataFrame ?

1voto

Jay Bazuzi Puntos 194

Puede guardar los objetos de R en el formato propio de R utilizando saveRDS y cargarlos de nuevo con readRDS . Por ejemplo:

> z = runif(10)
> z
 [1] 0.93781501 0.04437402 0.04995689 0.01317236 0.83926320 0.72379189
 [7] 0.07266764 0.12712897 0.55884653 0.26702832

son números aleatorios, guárdalos en un archivo:

> saveRDS(z, file="/tmp/zrandom.rds")

ahora elimina el objeto y vuelve a leer el archivo en otro objeto:

> rm(z)
> z2 = readRDS(file="/tmp/zrandom.rds")
> z2
 [1] 0.93781501 0.04437402 0.04995689 0.01317236 0.83926320 0.72379189
 [7] 0.07266764 0.12712897 0.55884653 0.26702832

y tengo los mismos números de vuelta.

Hay algunos casos en los que esto no funciona porque el objeto R está almacenando referencias a otros datos que no se guardan, pero creo que SpatialPixelsDataFrames debería funcionar correctamente.

El inconveniente es que ningún otro software, aparte de R, puede leer estas cosas.

Tal vez desee considerar por qué está utilizando SpatialPixelsDataFrames y por qué podría querer utilizar rásters, pero esto responde a su pregunta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X