Datos raster

Las imágenes satelitales son en general datos que se presentan en formto raster. Google Earth Engine es una plataforma que nos permite acceder a muchos datos históricos de diversos satélites por medio de su API (application programming interface, o interfaz de programación de aplicaciones).

Para poder utilizarla programando es necesario que contemos con un usuario y tengamos instalado todo el software detallado en la página del curso.

rgee y Google Earth Engine

rgee es un paquete que hace de interfaz entre R y Google Earth Engine. Como hemos hecho con los otros paquetes, para poder usarlo tenemos que cargarlo:

library(reticulate)
library(rgee)

Y ahora inicializamos GEE, para eso vamos a necesitar nuestro usuario habilitado. La primera vez que lo inicialicemos nos va a solicitar permiso para acceder a GEE por medio de una serie de pantallas en el nevegador de Internet predeterminado. Autorizamos y se nos brindará una API Key para ingresar en la consola de R. Con eso ya estamos autenticados y con acceso a la plataforma.

ee_Initialize('nombre de usuario')
# si queres trabajar con google drive podes inicializar así: ee_Initialize('nombre de usuario', drive = TRUE)

GEE tiene colecciones de productos e imágenes. ¿Cómo las consulto?. Lo primero es ir al catálogo de GEE para obtener el nombre de la colección. Yo les dejo los nombres de LANDSAT y SENTINEL, que son dos de las mas utilizadas:

  • Sentinel 2: COPERNICUS/S2
  • LandSat 8: LANDSAT/LC08

Vamos a consultar SENTINEL porque tiene un pixel más pequeño que LANDSAT y por ende nos puede brindar mayor cantidad de información:

Sentinel

# Seleccionando las bandas
bandas <- c('B8A','B4','B11', 'B2', 'B3', 'B5','B6','B7','B8')

# Filtrando los metadatos: usar Abril para mostrar la diferencia 
# en la selección de acuerdo al porcentaje de nubes (40, 10, 90).

imagenes_sentinel <- ee$ImageCollection('COPERNICUS/S2')$
        select(bandas)$
        filterDate('2020-10-01','2020-10-30')$
        filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than', 40)$
        mean()

escala_viz <- list(
  bands = c('B8A', 'B11', 'B4'),
  min = 0,
  max = 10000)

Map$setCenter(-35.662447,-63.783652)
Map$addLayer(imagenes_sentinel, visParams = escala_viz)

Mapa del mundo con todas las imágenes sentinel

Ahora bien, no es muy útil procesar todo el mundo cuando nosotros solo necesitamos una región, ahora vamos a ver como recortar un área de estudio y como cambiar algunos parámetros del filtro, como por ejemplo el porcentaje de nubes:

Cortando el área de estudio

# Definiendo un limite
este_de_la_pampa  <- ee$FeatureCollection('users/yabellini/zona_estudio')

# Seleccionando las bandas
bandas <- c('B8A','B4','B11', 'B2', 'B3', 'B5','B6','B7','B8')

# Filtrando los metadatos: usar Abril para mostrar la diferencia 
# en la selección de acuerdo al porcentaje de nubes (40, 10, 90).

imagenes_sentinel <- ee$ImageCollection('COPERNICUS/S2')$
        select(bandas)$
        filterDate('2017-04-01','2017-04-30')$
        filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than', 40)$
        mean()$
        clip(este_de_la_pampa)

# Armando una escala de visualización

escala_viz <- list(
  bands = c('B8A', 'B11', 'B4'),
  min = 0,
  max = 10000)

Map$centerObject(este_de_la_pampa, 7)
Map$addLayer(imagenes_sentinel, visParams = escala_viz)

Recorte del este de la provincia de La Pampa

Buscando imágenes

disponible <- ee$ImageCollection('LANDSAT/LC08/C01/T1_TOA')$
  filterDate('2020-04-01','2020-06-30')$
  filterBounds(ee$Geometry$Point(-63.783652,-35.662447))

ee_get_date_ic(disponible)

viz = list(min = 0,
           max = 0.7,
           bands = c('B7','B5','B4'),
           gamma = 1.75)

landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_228085_20200428') #Este ID lo saqué del listado anterior

Map$centerObject(eeObject = landsat,zoom = 8)
Map$addLayer(eeObject = landsat,visParams = viz)

Ejemplo de escena LANDSAT

Indices multiespectrales

Los indices multiespectrales son diferentes combinaciones de bandas que nos permiten enfocarnos en un tipo de información para analizar una cobertura o un fenómeno en particular. Si no sabemos muy bien que tipo de indices se pueden calcular y para que sirven la herramienta LandViewer es un muy buen lugar para consultar.

Como calcular NDVI Sentinel 2

# Buscar imagen

latlon <- ee$Geometry$Point(-63.783652,-35.662447)

coleccion_sen2 <- ee$ImageCollection('COPERNICUS/S2')$
  filterDate('2020-10-01','2020-10-30')$
  filterBounds(latlon)$
  filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than',5)

ee_get_date_ic(coleccion_sen2)

# Seleccionar una del listado

id <- 'COPERNICUS/S2/20201026T141049_20201026T142106_T20HMF'
sen2 <- ee$Image(id)

Map$centerObject(latlon,zoom = 12)

# Definir paleta de colores
viz <- list(palette = c(
  "#d73027", "#f46d43", 
  "#fdae61", "#fee08b",
  "#d9ef8b", "#a6d96a",
  "#66bd63", "#1a9850")
)

# Calcular indice

sen2$normalizedDifference(c('B8A','B4')) %>% 
  Map$addLayer(visParams = viz)

NDVI con Sentinel

LS0tDQp0aXRsZTogIkRhdG9zIHJhc3RlcnMgeSByZ2VlIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMjIERhdG9zIHJhc3Rlcg0KDQpMYXMgaW3DoWdlbmVzIHNhdGVsaXRhbGVzIHNvbiBlbiBnZW5lcmFsIGRhdG9zIHF1ZSBzZSBwcmVzZW50YW4gZW4gZm9ybXRvIHJhc3Rlci4gIEdvb2dsZSBFYXJ0aCBFbmdpbmUgZXMgdW5hIHBsYXRhZm9ybWEgcXVlIG5vcyBwZXJtaXRlIGFjY2VkZXIgYSBtdWNob3MgZGF0b3MgaGlzdMOzcmljb3MgZGUgZGl2ZXJzb3Mgc2F0w6lsaXRlcyBwb3IgbWVkaW8gZGUgc3UgQVBJIChhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UsIG8gaW50ZXJmYXogZGUgcHJvZ3JhbWFjacOzbiBkZSBhcGxpY2FjaW9uZXMpLg0KDQpQYXJhIHBvZGVyIHV0aWxpemFybGEgcHJvZ3JhbWFuZG8gZXMgbmVjZXNhcmlvIHF1ZSBjb250ZW1vcyBjb24gdW4gdXN1YXJpbyB5IHRlbmdhbW9zIGluc3RhbGFkbyB0b2RvIGVsIHNvZnR3YXJlIGRldGFsbGFkbyBlbiBsYSBww6FnaW5hIGRlbCBjdXJzby4NCg0KIyMgcmdlZSB5IEdvb2dsZSBFYXJ0aCBFbmdpbmUNCg0KKipyZ2VlKiogZXMgdW4gcGFxdWV0ZSBxdWUgaGFjZSBkZSBpbnRlcmZheiBlbnRyZSBSIHkgR29vZ2xlIEVhcnRoIEVuZ2luZS4gIENvbW8gaGVtb3MgaGVjaG8gY29uIGxvcyBvdHJvcyBwYXF1ZXRlcywgcGFyYSBwb2RlciB1c2FybG8gdGVuZW1vcyBxdWUgY2FyZ2FybG86DQoNCmBgYHtyfQ0KbGlicmFyeShyZXRpY3VsYXRlKQ0KbGlicmFyeShyZ2VlKQ0KDQpgYGANCg0KWSBhaG9yYSBpbmljaWFsaXphbW9zIEdFRSwgcGFyYSBlc28gdmFtb3MgYSBuZWNlc2l0YXIgbnVlc3RybyB1c3VhcmlvIGhhYmlsaXRhZG8uICBMYSBwcmltZXJhIHZleiBxdWUgbG8gaW5pY2lhbGljZW1vcyBub3MgdmEgYSBzb2xpY2l0YXIgcGVybWlzbyBwYXJhIGFjY2VkZXIgYSBHRUUgcG9yIG1lZGlvIGRlIHVuYSBzZXJpZSBkZSBwYW50YWxsYXMgZW4gZWwgbmV2ZWdhZG9yIGRlIEludGVybmV0IHByZWRldGVybWluYWRvLiAgQXV0b3JpemFtb3MgeSBzZSBub3MgYnJpbmRhcsOhIHVuYSBBUEkgS2V5IHBhcmEgaW5ncmVzYXIgZW4gbGEgY29uc29sYSBkZSBSLiBDb24gZXNvIHlhIGVzdGFtb3MgYXV0ZW50aWNhZG9zIHkgY29uIGFjY2VzbyBhIGxhIHBsYXRhZm9ybWEuDQoNCmBgYHtyIGV2YWw9RkFMU0V9DQplZV9Jbml0aWFsaXplKCdub21icmUgZGUgdXN1YXJpbycpDQojIHNpIHF1ZXJlcyB0cmFiYWphciBjb24gZ29vZ2xlIGRyaXZlIHBvZGVzIGluaWNpYWxpemFyIGFzw606IGVlX0luaXRpYWxpemUoJ25vbWJyZSBkZSB1c3VhcmlvJywgZHJpdmUgPSBUUlVFKQ0KYGBgDQoNCkdFRSB0aWVuZSBjb2xlY2Npb25lcyBkZSBwcm9kdWN0b3MgZSBpbcOhZ2VuZXMuICDCv0PDs21vIGxhcyBjb25zdWx0bz8uIExvIHByaW1lcm8gZXMgaXIgYWwgY2F0w6Fsb2dvIGRlIEdFRSBwYXJhIG9idGVuZXIgZWwgbm9tYnJlIGRlIGxhIGNvbGVjY2nDs24uICBZbyBsZXMgZGVqbyBsb3Mgbm9tYnJlcyBkZSBMQU5EU0FUIHkgU0VOVElORUwsIHF1ZSBzb24gZG9zIGRlIGxhcyBtYXMgdXRpbGl6YWRhczoNCg0KDQoqIFNlbnRpbmVsIDI6IENPUEVSTklDVVMvUzINCiogTGFuZFNhdCA4OiBMQU5EU0FUL0xDMDgNCg0KVmFtb3MgYSBjb25zdWx0YXIgU0VOVElORUwgcG9ycXVlIHRpZW5lIHVuIHBpeGVsIG3DoXMgcGVxdWXDsW8gcXVlIExBTkRTQVQgeSBwb3IgZW5kZSBub3MgcHVlZGUgYnJpbmRhciBtYXlvciBjYW50aWRhZCBkZSBpbmZvcm1hY2nDs246IA0KDQoNCiMjIFNlbnRpbmVsDQoNCmBgYHtyIGV2YWw9RkFMU0V9DQojIFNlbGVjY2lvbmFuZG8gbGFzIGJhbmRhcw0KYmFuZGFzIDwtIGMoJ0I4QScsJ0I0JywnQjExJywgJ0IyJywgJ0IzJywgJ0I1JywnQjYnLCdCNycsJ0I4JykNCg0KIyBGaWx0cmFuZG8gbG9zIG1ldGFkYXRvczogdXNhciBBYnJpbCBwYXJhIG1vc3RyYXIgbGEgZGlmZXJlbmNpYSANCiMgZW4gbGEgc2VsZWNjacOzbiBkZSBhY3VlcmRvIGFsIHBvcmNlbnRhamUgZGUgbnViZXMgKDQwLCAxMCwgOTApLg0KDQppbWFnZW5lc19zZW50aW5lbCA8LSBlZSRJbWFnZUNvbGxlY3Rpb24oJ0NPUEVSTklDVVMvUzInKSQNCiAgICAgICAgc2VsZWN0KGJhbmRhcykkDQogICAgICAgIGZpbHRlckRhdGUoJzIwMjAtMTAtMDEnLCcyMDIwLTEwLTMwJykkDQogICAgICAgIGZpbHRlck1ldGFkYXRhKCdDTE9VRFlfUElYRUxfUEVSQ0VOVEFHRScsJ2xlc3NfdGhhbicsIDQwKSQNCiAgICAgICAgbWVhbigpDQoNCmVzY2FsYV92aXogPC0gbGlzdCgNCiAgYmFuZHMgPSBjKCdCOEEnLCAnQjExJywgJ0I0JyksDQogIG1pbiA9IDAsDQogIG1heCA9IDEwMDAwKQ0KDQpNYXAkc2V0Q2VudGVyKC0zNS42NjI0NDcsLTYzLjc4MzY1MikNCk1hcCRhZGRMYXllcihpbWFnZW5lc19zZW50aW5lbCwgdmlzUGFyYW1zID0gZXNjYWxhX3ZpeikNCmBgYA0KDQohW01hcGEgZGVsIG11bmRvIGNvbiB0b2RhcyBsYXMgaW3DoWdlbmVzIHNlbnRpbmVsXShpbWcvc2VudGluZWxfY29tcGxldG8ucG5nKQ0KDQpBaG9yYSBiaWVuLCBubyBlcyBtdXkgw7p0aWwgcHJvY2VzYXIgdG9kbyBlbCBtdW5kbyBjdWFuZG8gbm9zb3Ryb3Mgc29sbyBuZWNlc2l0YW1vcyB1bmEgcmVnacOzbiwgYWhvcmEgdmFtb3MgYSB2ZXIgY29tbyByZWNvcnRhciB1biDDoXJlYSBkZSBlc3R1ZGlvIHkgY29tbyBjYW1iaWFyIGFsZ3Vub3MgcGFyw6FtZXRyb3MgZGVsIGZpbHRybywgY29tbyBwb3IgZWplbXBsbyBlbCBwb3JjZW50YWplIGRlIG51YmVzOg0KDQojIyBDb3J0YW5kbyBlbCDDoXJlYSBkZSBlc3R1ZGlvDQoNCmBgYHtyIGV2YWw9RkFMU0V9DQojIERlZmluaWVuZG8gdW4gbGltaXRlDQplc3RlX2RlX2xhX3BhbXBhICA8LSBlZSRGZWF0dXJlQ29sbGVjdGlvbigndXNlcnMveWFiZWxsaW5pL3pvbmFfZXN0dWRpbycpDQoNCiMgU2VsZWNjaW9uYW5kbyBsYXMgYmFuZGFzDQpiYW5kYXMgPC0gYygnQjhBJywnQjQnLCdCMTEnLCAnQjInLCAnQjMnLCAnQjUnLCdCNicsJ0I3JywnQjgnKQ0KDQojIEZpbHRyYW5kbyBsb3MgbWV0YWRhdG9zOiB1c2FyIEFicmlsIHBhcmEgbW9zdHJhciBsYSBkaWZlcmVuY2lhIA0KIyBlbiBsYSBzZWxlY2Npw7NuIGRlIGFjdWVyZG8gYWwgcG9yY2VudGFqZSBkZSBudWJlcyAoNDAsIDEwLCA5MCkuDQoNCmltYWdlbmVzX3NlbnRpbmVsIDwtIGVlJEltYWdlQ29sbGVjdGlvbignQ09QRVJOSUNVUy9TMicpJA0KICAgICAgICBzZWxlY3QoYmFuZGFzKSQNCiAgICAgICAgZmlsdGVyRGF0ZSgnMjAxNy0wNC0wMScsJzIwMTctMDQtMzAnKSQNCiAgICAgICAgZmlsdGVyTWV0YWRhdGEoJ0NMT1VEWV9QSVhFTF9QRVJDRU5UQUdFJywnbGVzc190aGFuJywgNDApJA0KICAgICAgICBtZWFuKCkkDQogICAgICAgIGNsaXAoZXN0ZV9kZV9sYV9wYW1wYSkNCg0KIyBBcm1hbmRvIHVuYSBlc2NhbGEgZGUgdmlzdWFsaXphY2nDs24NCg0KZXNjYWxhX3ZpeiA8LSBsaXN0KA0KICBiYW5kcyA9IGMoJ0I4QScsICdCMTEnLCAnQjQnKSwNCiAgbWluID0gMCwNCiAgbWF4ID0gMTAwMDApDQoNCk1hcCRjZW50ZXJPYmplY3QoZXN0ZV9kZV9sYV9wYW1wYSwgNykNCk1hcCRhZGRMYXllcihpbWFnZW5lc19zZW50aW5lbCwgdmlzUGFyYW1zID0gZXNjYWxhX3ZpeikNCg0KYGBgDQoNCiFbUmVjb3J0ZSBkZWwgZXN0ZSBkZSBsYSBwcm92aW5jaWEgZGUgTGEgUGFtcGFdKGltZy9yZWNvcnRlLnBuZykNCg0KIyMgQnVzY2FuZG8gaW3DoWdlbmVzDQoNCmBgYHtyLGV2YWw9RkFMU0V9DQoNCmRpc3BvbmlibGUgPC0gZWUkSW1hZ2VDb2xsZWN0aW9uKCdMQU5EU0FUL0xDMDgvQzAxL1QxX1RPQScpJA0KICBmaWx0ZXJEYXRlKCcyMDIwLTA0LTAxJywnMjAyMC0wNi0zMCcpJA0KICBmaWx0ZXJCb3VuZHMoZWUkR2VvbWV0cnkkUG9pbnQoLTYzLjc4MzY1MiwtMzUuNjYyNDQ3KSkNCg0KZWVfZ2V0X2RhdGVfaWMoZGlzcG9uaWJsZSkNCg0Kdml6ID0gbGlzdChtaW4gPSAwLA0KICAgICAgICAgICBtYXggPSAwLjcsDQogICAgICAgICAgIGJhbmRzID0gYygnQjcnLCdCNScsJ0I0JyksDQogICAgICAgICAgIGdhbW1hID0gMS43NSkNCg0KbGFuZHNhdCA8LSBlZSRJbWFnZSgnTEFORFNBVC9MQzA4L0MwMS9UMV9UT0EvTEMwOF8yMjgwODVfMjAyMDA0MjgnKSAjRXN0ZSBJRCBsbyBzYXF1w6kgZGVsIGxpc3RhZG8gYW50ZXJpb3INCg0KTWFwJGNlbnRlck9iamVjdChlZU9iamVjdCA9IGxhbmRzYXQsem9vbSA9IDgpDQpNYXAkYWRkTGF5ZXIoZWVPYmplY3QgPSBsYW5kc2F0LHZpc1BhcmFtcyA9IHZpeikNCg0KYGBgDQoNCiFbRWplbXBsbyBkZSBlc2NlbmEgTEFORFNBVF0oaW1nL2ltYWdlbl9sYW5kc2F0LnBuZykNCg0KIyMgSW5kaWNlcyBtdWx0aWVzcGVjdHJhbGVzDQoNCkxvcyBpbmRpY2VzIG11bHRpZXNwZWN0cmFsZXMgc29uIGRpZmVyZW50ZXMgY29tYmluYWNpb25lcyBkZSBiYW5kYXMgcXVlIG5vcyBwZXJtaXRlbiBlbmZvY2Fybm9zIGVuIHVuIHRpcG8gZGUgaW5mb3JtYWNpw7NuIHBhcmEgYW5hbGl6YXIgdW5hIGNvYmVydHVyYSBvIHVuIGZlbsOzbWVubyBlbiBwYXJ0aWN1bGFyLiAgU2kgbm8gc2FiZW1vcyBtdXkgYmllbiBxdWUgdGlwbyBkZSBpbmRpY2VzIHNlIHB1ZWRlbiBjYWxjdWxhciB5IHBhcmEgcXVlIHNpcnZlbiBsYSBoZXJyYW1pZW50YSBbTGFuZFZpZXdlcl0oaHR0cHM6Ly9lb3MuY29tL2xhbmR2aWV3ZXIvKSBlcyB1biBtdXkgYnVlbiBsdWdhciBwYXJhIGNvbnN1bHRhci4NCg0KIyMgQ29tbyBjYWxjdWxhciBORFZJIFNlbnRpbmVsIDINCg0KYGBge3IgZXZhbD1GQUxTRX0NCg0KIyBCdXNjYXIgaW1hZ2VuDQoNCmxhdGxvbiA8LSBlZSRHZW9tZXRyeSRQb2ludCgtNjMuNzgzNjUyLC0zNS42NjI0NDcpDQoNCmNvbGVjY2lvbl9zZW4yIDwtIGVlJEltYWdlQ29sbGVjdGlvbignQ09QRVJOSUNVUy9TMicpJA0KICBmaWx0ZXJEYXRlKCcyMDIwLTEwLTAxJywnMjAyMC0xMC0zMCcpJA0KICBmaWx0ZXJCb3VuZHMobGF0bG9uKSQNCiAgZmlsdGVyTWV0YWRhdGEoJ0NMT1VEWV9QSVhFTF9QRVJDRU5UQUdFJywnbGVzc190aGFuJyw1KQ0KDQplZV9nZXRfZGF0ZV9pYyhjb2xlY2Npb25fc2VuMikNCg0KIyBTZWxlY2Npb25hciB1bmEgZGVsIGxpc3RhZG8NCg0KaWQgPC0gJ0NPUEVSTklDVVMvUzIvMjAyMDEwMjZUMTQxMDQ5XzIwMjAxMDI2VDE0MjEwNl9UMjBITUYnDQpzZW4yIDwtIGVlJEltYWdlKGlkKQ0KDQpNYXAkY2VudGVyT2JqZWN0KGxhdGxvbix6b29tID0gMTIpDQoNCiMgRGVmaW5pciBwYWxldGEgZGUgY29sb3Jlcw0Kdml6IDwtIGxpc3QocGFsZXR0ZSA9IGMoDQogICIjZDczMDI3IiwgIiNmNDZkNDMiLCANCiAgIiNmZGFlNjEiLCAiI2ZlZTA4YiIsDQogICIjZDllZjhiIiwgIiNhNmQ5NmEiLA0KICAiIzY2YmQ2MyIsICIjMWE5ODUwIikNCikNCg0KIyBDYWxjdWxhciBpbmRpY2UNCg0Kc2VuMiRub3JtYWxpemVkRGlmZmVyZW5jZShjKCdCOEEnLCdCNCcpKSAlPiUgDQogIE1hcCRhZGRMYXllcih2aXNQYXJhbXMgPSB2aXopDQpgYGANCiFbTkRWSSBjb24gU2VudGluZWxdKGltZy9ORFZJX3NlbnRpbmVsMi5wbmcpDQo=