1 votos

Transformar un archivo .txt en un ráster en R

Tengo un archivo .txt que consta de 160 filas y 320 columnas. Cubre la región geográfica desde 34 hasta 41.95 en latitud y desde 19 hasta 34.95 en longitud. Su resolución espacial es de 0.05 x 0.05. Uso el siguiente código para leer el archivo .txt:

a1 = as.matrix(read.table("/home/...", header=F, sep = "\t",   as.is=TRUE))
rast1 = raster(a1)
extent(rast1) = c(34,41.95,19,34.95)
projection(rast1) = CRS("+proj=longlat +datum=WGS84")

Lo cual me da el siguiente resultado:

class       : RasterLayer 
dimensions  : 160, 320, 51200  (nrow, ncol, ncell)
resolution  : 0.02484375, 0.0996875  (x, y)
extent      : 34, 41.95, 19, 34.95  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 245.2738  (min, max)

La resolución dada arriba no es correcta. Cuando intento resolver este problema ejecutando:

res(rast1) = c(0.05, 0.05)

Obtengo el siguiente resultado:

class       : RasterLayer 
dimensions  : 319, 159, 50721  (nrow, ncol, ncell)
resolution  : 0.05, 0.05  (x, y)
extent      : 34, 41.95, 19, 34.95  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

En ese caso, el número de filas y columnas se invierten y disminuyen en 1. Además, todas las celdas tienen NA's como valores.

¿Podrías explicarme por qué sucede esto y cómo puedo leer correctamente mi archivo .txt y transformarlo en un raster?

3voto

Dan Puntos 16

En primer lugar, dado tu extensión, parece que tienes tus dimensiones de fila/columna invertidas. Si las cambio y aplico la extensión automáticamente llego muy cerca (0.049) de tu resolución deseada (0.050). Me gustaría señalar que algunos datos de matrices espaciales están volteados, así que este puede no ser precisamente tu error.

library(raster)

nrows = 160 
ncols = 320 
r.mat <- matrix(data = runif(nrows*ncols), nrow = nrows, ncol = ncols)
r <- raster(r.mat)
extent(r) <- extent(c(34,41.95,19,34.95))
res(r)

nrows = 320 
ncols = 160 
r.mat <- matrix(data = runif(nrows*ncols), nrow = nrows, ncol = ncols)
r <- raster(r.mat)
extent(r) <- extent(c(34,41.95,19,34.95))
res(r)

Ahora, llegar exactamente a 0.05 requerirá que juegues con los valores en tu extensión definida. Esto podría ser un problema de precisión en la función raster o un error de tu parte, pero tu extensión definida está consistentemente eliminando una fila y columna, causando una discrepancia entre las dimensiones de tu matriz y raster. Si puedes encontrar la expansión correcta, entonces puedes ajustar estas dos dimensiones faltantes. En cualquier metadato del que estés extrayendo la extensión, es posible que estés inadvertidamente eliminando la precisión decimal, lo que causa que las dimensiones estén ligeramente desfasadas.

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