Tengo dos capas que cubren aproximadamente, pero no exactamente, la misma área. Uno es la elevación de la tierra de algunas islas. El otro es la profundidad del agua alrededor de las islas. Puedo resolver los datos verticales entre las capas, así que eso no es un problema.
Me gustaría crear una nueva capa que consiste en la elevación de la tierra y la profundidad del agua circundante. Los problemas:
- Las extensiones no son exactamente las mismas
- Las resoluciones son muy diferentes
- Las relaciones de aspecto son diferentes
¿Hay una manera fácil de crear una nueva capa mirando la capa de mayor resolución (tierra) y si el valor es menor que 75 suponer que es agua, luego mirar la otra capa ráster como la profundidad del agua de lo contrario aceptar la elevación de la tierra como el valor en la nueva capa?
Tierra
class : RasterLayer
dimensions : 488, 1129, 550952 (nrow, ncol, ncell)
resolution : 6.2e-05, 4.5e-05 (x, y)
extent : -79.39998, -79.32998, 43.61302, 43.63498 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : dem_620483
values : 74.89935, 87.08463 (min, max)
Agua
> to_harbour
class : RasterLayer
dimensions : 26, 84, 2184 (nrow, ncol, ncell)
resolution : 0.0008333333, 0.0008333333 (x, y)
extent : -79.39958, -79.32958, 43.61292, 43.63458 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
data source : in memory
names : ontario_lld
values : -15.9335, 5.764997 (min, max)
Pregunta Original
Deseo combinar datos de elevación en una capa ráster con datos batimétricos en otra capa ráster.
Creo que usar raster::overlay
es el enfoque correcto aquí. Sin embargo, antes de hacer que funcione, necesito que ambas capas tengan la misma extensión.
Aquí está el código para aislar la parte de tierra en la que estoy interesado.
file <- "data/GTA_elevation _data/GTA_DEM/6a7a7e71-f502-4336-bba2-364c7eefd950-SW/dem_620483/dem_620483.flt"
# Convertir a clase RasterLayer
img_raster <- raster(file)
# Transformar RasterLayer a sistema de coordenadas lat/long
elevation <- projectRaster(img_raster, crs="+proj=longlat +datum=WGS84")
# Crear caja delimitadora
# Longitud (xmin, xmax), Latitud (ymin, ymax)
island_rect <- as(raster::extent(-79.4, -79.33, 43.613, 43.635), "SpatialPolygons")
proj4string(island_rect) <- "+proj=longlat +datum=WGS84"
# Recortar solo las islas
to_island <- crop(elevation, island_rect)
Cuando veo la extensión, no es exactamente lo que ingresé:
> to_island
class : RasterLayer
dimensions : 488, 1129, 550952 (nrow, ncol, ncell)
resolution : 6.2e-05, 4.5e-05 (x, y)
extent : -79.39998, -79.32998, 43.61302, 43.63498 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : dem_620483
values : 74.89935, 87.08463 (min, max)
Esto se convierte en un problema porque cuando uso raster::overlay
para combinar la elevación de la tierra y los datos batimétricos en una capa ráster overlay
da un error porque las extensiones son diferentes: Error in compareRaster(x) : different extent
Suponga que en la capa de tierra cualquier valor menor a 75 es agua. No estoy 100% seguro de cómo usar el comando overlay
.
to_island_combo <- raster::overlay(to_island, to_harbour, fun = function(x, y) {
(x < 75) <- y
return(x)
})
0 votos
recortar
solo devolverá píxeles enteros, por lo que si aplicasrecortar
con una extensión que no esté en un límite de píxeles obtendrás algo truncado (o posiblemente extendido, no estoy seguro si redondea al límite de píxeles más cercano). Creo que necesitas mostrarnossummary(elevación)
ysummary(hacia_puerto)
porque para usarsuperponer
no solo las proyecciones deben ser iguales, sino que también las extensiones y resoluciones deben ser iguales.0 votos
Gracias Spacedman. He agregado información a la pregunta - diferentes extensiones y resoluciones.
0 votos
Una aproximación que se me ocurre es obtener las coordenadas de todos los píxeles en el raster de tierra que desea reemplazar con valores de agua,
extraer
el valor del agua del raster deagua
, y luego poner esos valores en el raster detierra
. Su resultado está en la resolución del raster detierra
.