- Datos espaciales y análisis exploratorio
- Datos georeferenciados
- Creación y tratamiento de datos tipo raster en R (librería raster)
- Gráficos exploratorios
- Aplicaciones
raster soporta el análisis de datos espaciales en R. raster define un conjunto de clases para representar datos espaciales.library(raster)
#crear el raster
r <- raster()
hasValues(r) #tiene valores el raster?
ncol(r) <- nrow(r) <- 10 #num de col
dim(r) # dim del raster
xmax(r) # max en el eje horizontal(ext)
projection(r) <- "+proj=utm +zone=48 +datum=WGS84"
#agregar valores al raster 1:ncell(r)
values(r) <- 1:ncell(r)
#ejemplo
set.seed(0)
values(r) <- runif(ncell(r))
plot(r, main='Raster with 1000 cells')
Vamos el ejemplo siguiente:
#filename <- "/home/rober/Downloads/geog5330-master/week8/Data/ext5.grd"
# filename <- "/home/rober/Downloads/ggmapTemp.png"
filename <- system.file("external/test.grd", package="raster")
filename
# Creamos el raster
r <- raster(filename)
filename(r)
hasValues(r)
inMemory(r)
Grafiquemos el raster
plot(r, main='RasterLayer del file')
Cambiemos su resolución
aggregate.r <- aggregate(r, fact=2)
plot(aggregate.r, main='RasterLayer del file')
Otras funciones: crear raster de un raster múltiple
filename <- system.file("external/rlogo.grd", package="raster")
filename
b <- brick(filename)
r <- raster(b, layer=2)
plot(r)
locs = read.csv(file="/home/rober/Downloads/geog5330-master/week8/Data/trees2.csv", header=T)
# Generate psuedo-absence tree locations as background data
coordinates(locs)=c('lngitude', 'latitude')
#proj4string(locs) = CRS('+init=epsg:4326')
x = circles(coordinates(locs), d=50000, lonlat=T)
#bg = spsample(x@polygons, 1000, type='random', iter=1000)
# load the climate conditions raster datasets
clim = brick('/home/rober/Downloads/geog5330-master/week8/Data/ext5.grd')
plot(clim, 1, cex=0.5, legend=T, mar=par("mar"), xaxt="n", yaxt="n", main="Annual mean temperature")
map("state", xlim=c(-119, -113), ylim=c(33.5, 38), fill=F, col="black", add=T)
# presence of trees
points(locs, col='red')
# psuedo-absense
#points(bg, col='blue')
require(maps)
require(sp)
require(maptools)
map.county <- map("county", plot = FALSE, fill = TRUE, res = 0)
IDs <- sapply(strsplit(q$names, ":"), function(x) x[1])
q <- map2SpatialPolygons(q, IDs=q$names, proj4string=CRS("+proj=longlat +datum=WGS84"))
# map("state", xlim=c(-119, -113), ylim=c(33.5, 38), fill=F, col="black", add=T)
A continuación vemos algunas operaciones algebraicas que se pueden realizar con los raster.
>, >=, <, ==, ! # operadores logicos
abs, round, ceiling, floor, trunc, sqrt
log, log10, exp # logaritmos y exponentes
cos, sin, atan, tan # funciones trigonometricas
max, min # maximo y minimo
range, prod, sum # algebra basica
any, all # consultas
#raster vacio
r <- raster(ncol=10, nrow=10)
values(r) <- 1:ncell(r)
#algunas operaciones
s <- r + 10
s <- sqrt(s)
s <- s * r + 5
r[] <- runif(ncell(r))
r <- round(r)
r <- r == 1
#reemplazo
s[r] <- -0.5
s[!r] <- 5
s[s == 5] <- 15
r <- raster(ncol=5, nrow=5)
#r <- raster(ncol=2, nrow=2)
r[] <- 1
s <- stack(r, r+1)
q <- stack(r, r+2, r+4, r+6)
x <- r + s + q
a <- mean(r,s,10)
b <- sum(r,s)
st <- stack(r, s, a, b)
sst <- sum(st)
sst
cellStats si en lugar de un RasterLayer desea un solo número que resuma los valores de todas las celdas en cada capa.cellStats(st, 'sum')
cellStats(sst, 'sum')
cellStats(st, 'mean')
r <- raster()
r[] <- 1:ncell(r)
ra <- aggregate(r, 20)
rd <- disaggregate(ra, 20)
r1 <- crop(r, extent(-50,0,0,30))
r2 <- crop(r, extent(-10,50,-20, 10))
m <- merge(r1, r2, filename='~/Desktop/test.grd', overwrite=TRUE)
plot(m)
cut o reclassify para reemplazar rangos de val. con val. únicos o subs para sust. val. indiv.
r <- raster(ncol=3, nrow=2)
r[] <- 1:ncell(r)
getValues(r)
Valores \( < 4 = \) NA
s <- calc(r, fun=function(x){ x[x < 4] <- NA; return(x)} )
as.matrix(s)
Realizar la operación r/(2*sqrt(y)) + 5
w <- overlay(r, s, fun=function(x, y){ x / (2 * sqrt(y)) + 5 } )
as.matrix(w)
Remover de r todos los valores que son NA en w
u <- mask(r, w)
as.matrix(u)
Identifica los valores de celda en u que son los mismos que en s.
v <- u==s
as.matrix(v)
Reemplazar NA's en w por los valores de r
cvr <- cover(w, r)
as.matrix(w)
Cambiar valores entre 0 y 2 por 0, etc.
x <- reclassify(w, c(0,2,1, 2,5,2, 4,10,3))
as.matrix(x)
Substituir 2 por 40 y por 50
y <- subs(x, data.frame(id=c(2,3), v=c(40,50)))
as.matrix(y)
La función clumpidentifica grupos de celdas que están conectadas.
edges, identifica bordes, es decir, transiciones entre valores de celda. area, calcula el tamaño de cada celda de cuadrícula (para rásteres no proyectados),
zonal calcula estadísticas zonales, es decir, valores resumidos de un objeto Raster* para cada “zona” definida por un RasterLayer.r <- raster(nrow=45, ncol=90)
r[] <- round(runif(ncell(r))*3)
a <- area(r)
zonal(a, r, 'sum')
r <- raster(ncol=36, nrow=18)
r[] <- runif(ncell(r))
cellStats(r, mean)
Estadística de zona
s <- r
s[] <- round(runif(ncell(r)) * 5)
zonal(r, s, 'mean')
Conteo de celdas
freq(s)
freq(s, value=3)
library(raster)
r <- raster(ncol=36, nrow=18)
ncol(r) #n columnas
nrow(r) # n filas
ncell(r) # n celdas
rowFromCell(r, 100) # fila de la celda 100
colFromCell(r, 100) #col de la celda 100
cellFromRowCol(r,5,5) # celda de la fila y columna
xyFromCell(r, 100) # coordenadas de la celda 100
cellFromXY(r, c(0,0)) #celda con la coordenada 0,0
colFromX(r, 0) #col de la coordenada x=0
rowFromY(r, 0) #fila de la coordenada y=0
Se puede acceder a los valores de celda con varios métodos. Use getValues para obtener todos los valores o una sola fila; y getValuesBlock para leer un bloque (rectángulo) de valores de celda.
r <- raster(system.file("external/test.grd", package="raster"))
v <- getValues(r, 50)
v[35:39]
getValuesBlock(r, 50, 1, 35, 5)
También puede leer valores usando números de celda o coordenadas (x,y) usando el método de extracción.
cells <- cellFromRowCol(r, 50, 35:39)
cells
extract(r, cells)
xy <- xyFromCell(r, cells)
xy
Raster tratado como vector
cells <- cellFromRowCol(r, 50, 35:39)
r[cells]
r[1:4]
r[2:3] <- 10
r[1:4]
Raster tratado como matriz
r[1]
r[2,2]
r[1,]
r[,2]
r[1:3,1:3]
# keep the matrix structure
r[1:3,1:3, drop=FALSE]