Saltar al contenido

R: ¿Cómo obtener latitudes y longitudes de un RasterLayer?

Por fin luego de mucho trabajar pudimos dar con la contestación de esta contratiempo que muchos de nuestros lectores de este sitio web tienen. Si quieres compartir algún detalle no dejes de aportar tu información.

Solución:

necesita reproyectar el ráster en una proyección geográfica (grados decimales) usando “projectRaster” o “spTransform”. También mire las definiciones de CRS sp que especifican su proyección deseada string. El ejemplo en la ayuda para “projectRaster” es bastante claro sobre cómo hacer esto.

Si fuerza sus datos ráster en un objeto SpatialPointsDataFrame, entonces usaría “spTransform” y extraería las coordenadas de la ranura @coordinates y las agregaría al data.frame en la ranura @data. Aquí hay un ejemplo de cómo se vería.

library(raster)
library(rgdal) # for spTransform

# Create data
r <- raster(ncols=100, nrows=100)
  r[] <- runif(ncell(r))
  crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
  projection(r)

# Convert raster to SpatialPointsDataFrame
r.pts <- rasterToPoints(r, spatial=TRUE)
  proj4string(r.pts)

# reproject sp object
geo.prj <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0" 
r.pts <- spTransform(r.pts, CRS(geo.prj)) 
  proj4string(r.pts)

# Assign coordinates to @data slot, display first 6 rows of data.frame
[email protected] <- data.frame([email protected], long=coordinates(r.pts)[,1],
                         lat=coordinates(r.pts)[,2])                         
head([email protected])

Debo señalar que no es una buena práctica convertir rásteres en una clase de objeto vectorial y niega las ventajas del paquete de ráster que proporciona un procesamiento seguro para la memoria. A menudo es prudente pensar realmente en su problema y evaluar si lo está abordando correctamente. Si el OP hubiera proporcionado un contexto de por qué necesitan [x,y] coordenadas para cada celda, la comunidad del foro puede haber sido capaz de proporcionar alternativas computacionales que mantendrían el problema en un entorno de trama.

Obtenga las coordenadas de los centros de las celdas y cree un objeto espacial:

spts <- rasterToPoints(r, spatial = TRUE)

Transforme los puntos a su objetivo deseado:

library(rgdal)
llprj <-  "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"
llpts <- spTransform(spts, CRS(llprj))

Los valores ya están copiados como columnas en este SpatialPointsDataFrame.

print(llpts)

Ahora para terminar, obtenga un data.frame:

x <- as.data.frame(llpts)

Hay una implementación general de esto en el paquete SGAT, vea la función lonlatFromCell aquí:

https://github.com/SWotherspoon/SGAT/blob/master/R/Raster.R

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *