El conjunto de datos de GSW contiene muchas capas de datos que presentan los datos de aguas superficiales de diferentes maneras. Comenzaremos por visualizar la capa de ocurrencia de agua, que proporciona un resumen de dónde y con qué frecuencia se produjo agua superficial durante todo el período comprendido entre marzo de 1984 y octubre de 2015.
En esta sección del instructivo, se hará lo siguiente:
- Agregar una capa de mapa para visualizar la presencia de agua superficial
- mostrar cómo consultar los valores de la capa del mapa
- agregar diseño personalizado para mejorar la visualización
- Crea una capa de máscara de agua binaria con un valor de umbral.
- Centrar el mapa en partes interesantes del mundo
- mostrar cómo refactorizar el script para que sea más legible y fácil de mantener
Cómo crear una visualización básica
Comienza por copiar las siguientes instrucciones en el editor de código:
Editor de código (JavaScript)
var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater'); var occurrence = gsw.select('occurrence'); Map.addLayer(occurrence);
La primera instrucción hace referencia al objeto Image de Earth Engine para el conjunto de datos de GSW y lo almacena en una variable llamada gsw
.
La segunda instrucción selecciona una sola capa del conjunto de datos de GSW y la almacena en una variable llamada occurrence
.
La tercera instrucción agrega la imagen de ocurrencia al mapa interactivo del editor de código.
Haz clic en el botón "Ejecutar" del editor de código y, después de unos segundos, deberías ver un mapa con un color gris a lo largo de las costas, similar al de la Figura 1.

En la mayoría de las áreas, el conjunto de datos de GSW parece transparente, ya que las ubicaciones en las que no se recopilaron imágenes de Landsat (es decir, las áreas oceánicas) o en las que no se detectó agua en ninguna de las observaciones de los 32 años están enmascaradas.
Cómo inspeccionar valores
Para explorar los valores de la capa de ocurrencia de agua, usaremos la pestaña Inspector del Editor de código. Primero, haz clic en la pestaña del inspector y, luego, en el mapa para seleccionar una ubicación. En la pestaña del inspector, se mostrará información sobre cada una de las capas presentes en el lugar donde hiciste clic.

En el ejemplo anterior, el valor de la capa llamada value
es 98. Las unidades son puntos porcentuales, por lo que, aproximadamente, el 98% del tiempo la ubicación se clasificó como cubierta de agua.
El valor es el promedio de cada uno de los valores mensuales de ocurrencia de agua superficial, que se normaliza en función de la variación estacional, como se describe en la
Guía del usuario de datos (v2)
.
Refactorización para mejorar tu código
Nuestro script solo contiene dos instrucciones, pero ya tenemos la oportunidad de refactorizar el código para que nuestro script final sea más fácil de leer y mantener con el tiempo.
Actualmente, la instrucción Map.addLayer()
pasa un solo argumento occurrence
, que es el objeto de imagen de Earth Engine que queremos mostrar en el mapa. Sin embargo, el método Map.addLayer()
también permite que se le pasen argumentos adicionales. Para ver rápidamente qué argumentos están disponibles, coloca el cursor después del paréntesis de apertura y presiona la combinación de teclas para "Mostrar sugerencias de código" y abrir el documento de ayuda del método addLayer
. (Para ver las combinaciones de teclas, selecciona el menú Help -> Shortcuts).

Las combinaciones de teclas muestran que hay cinco argumentos que se pueden pasar a
Map.addLayer
:
eeObject
, visParams
, name
, shown
y
opacity
.
En nuestro script actual, pasamos una sola variable occurrence
que se interpreta como el primer argumento, eeObject
.
Para pasar el objeto de variable y un argumento adicional que nombra la capa, podemos
refactorizar el código para usar "argumentos con nombre" (eeObject
y name
)
donde se pasan al método desde una
estructura de datos JSON
como se muestra a continuación:
Editor de código (JavaScript)
Map.addLayer({eeObject: occurrence, name: 'Water Occurrence (1984-2015)'});
Vuelve a ejecutar el código para asegurarte de que siga funcionando después de los cambios de refactorización. El mapa resultante no debería cambiar.
Cómo agregar parámetros de visualización
A continuación, trabajaremos para mejorar los parámetros de visualización predeterminados, que hacen que el agua se vea gris. Agrega una nueva instrucción que cree una variable VIS_OCCURRENCE
y pásala como un argumento adicional al método addLayer.
Editor de código (JavaScript)
var VIS_OCCURRENCE = { min: 0, max: 100, palette: ['red', 'blue'] };
Editor de código (JavaScript)
Map.addLayer({ eeObject: occurrence.updateMask(occurrence.divide(100)), name: 'Water Occurrence (1984-2015)', visParams: VIS_OCCURRENCE });
Los parámetros de visualización almacenados en la estructura JSON VIS_OCCURRENCE
indican que se debe usar el color rojo para un valor mínimo del 0% y el azul para un valor máximo del 100%.
La incorporación de .updateMask(occurrence.divide(100))
hace que la opacidad o transparencia de los píxeles se establezca en función del valor de ocurrencia.
Vuelve a ejecutar la secuencia de comandos y observa los resultados revisados de nuestros cambios de diseño.

Ahora, las áreas de agua son azules. ¡Excelente!
Cómo crear una capa de umbral
La imagen de ocurrencia de agua contiene información sobre la frecuencia con la que se espera que haya agua, con un rango de valores del 0 al 100%. Sin embargo, a menudo es útil definir una capa de agua binaria (es decir, "agua" frente a "no agua") en función de un cierto porcentaje de ocurrencia (es decir, un valor de umbral). Usaremos esta capa binaria simple como una capa de fondo limpia sobre la que se pueden colocar otras capas de GSW. Para crear esta capa de umbral, puedes usar las siguientes instrucciones, que utilizan un valor de umbral del 90% para separar el agua de lo que no es agua.
Primero, definimos una nueva variable de visualización VIS_WATER_MASK
para contener la información de diseño de la máscara de agua:
Editor de código (JavaScript)
var VIS_WATER_MASK = { palette: ['white', 'black'] };
Luego, calculamos una capa de máscara de agua con el operador de comparación mayor que .gt(90)
y, luego, establecemos las áreas enmascaradas previamente en cero con el método .unmask()
:
Editor de código (JavaScript)
// Create a water mask layer, and set the image mask so that non-water areas // are opaque. var water_mask = occurrence.gt(90).unmask(0);
Por último, agrega la capa al mapa. Para que esta capa se renderice debajo de todas las demás, coloca la siguiente instrucción antes de cualquier otra instrucción Map.addLayer
.
Editor de código (JavaScript)
Map.addLayer({ eeObject: water_mask, visParams: VIS_WATER_MASK, name: '90% occurrence water mask' });

Viajar a lugares interesantes del mundo
Es divertido explorar el mundo desplazándose y acercándose, pero el mundo es grande y, a veces, ayuda saltar directamente a una ubicación en particular. A continuación, se incluye una serie de declaraciones que proporcionan una pequeña muestra de ubicaciones interesantes en términos de agua superficial. Solo debes quitar el comentario de una de las instrucciones a la vez, y tu secuencia de comandos irá a esa ubicación cuando se ejecute.
Editor de código (JavaScript)
// Uncomment one of the following statements to center the map. // Map.setCenter(-90.162, 29.8597, 10); // New Orleans, USA // Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico // Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA // Map.setCenter(149.412, -35.0789, 11); // Lake George, Australia // Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia // Map.setCenter(90.6743, 22.7382, 10); // Meghna River, Bangladesh // Map.setCenter(81.2714, 16.5079, 11); // Godavari River Basin Irrigation Project, India // Map.setCenter(14.7035, 52.0985, 12); // River Oder, Germany & Poland // Map.setCenter(-59.1696, -33.8111, 9); // Buenos Aires, Argentina Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru
Esta es solo una pequeña muestra de ubicaciones interesantes. ¡No dudes en agregar los tuyos!
Refactorización, otra vez…
Antes de pasar a la siguiente capa del conjunto de datos de GSW, realizaremos un poco más de refactorización de código. Específicamente, agruparemos nuestras declaraciones similares y agregaremos algunos comentarios que dividirán nuestro código en secciones para recursos, constantes, cálculos, centrado del mapa y adición de capas del mapa.
Esta es la secuencia de comandos refactorizada final:
Editor de código (JavaScript)
////////////////////////////////////////////////////////////// // Asset List ////////////////////////////////////////////////////////////// var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater'); var occurrence = gsw.select('occurrence'); ////////////////////////////////////////////////////////////// // Constants ////////////////////////////////////////////////////////////// var VIS_OCCURRENCE = { min: 0, max: 100, palette: ['red', 'blue'] }; var VIS_WATER_MASK = { palette: ['white', 'black'] }; ////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a water mask layer, and set the image mask so that non-water areas // are opaque. var water_mask = occurrence.gt(90).unmask(0); ////////////////////////////////////////////////////////////// // Initialize Map Location ////////////////////////////////////////////////////////////// // Uncomment one of the following statements to center the map. // Map.setCenter(-90.162, 29.8597, 10); // New Orleans, USA // Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico // Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA // Map.setCenter(149.412, -35.0789, 11); // Lake George, Australia // Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia // Map.setCenter(90.6743, 22.7382, 10); // Meghna River, Bangladesh // Map.setCenter(81.2714, 16.5079, 11); // Godavari River Basin Irrigation Project, India // Map.setCenter(14.7035, 52.0985, 12); // River Oder, Germany & Poland // Map.setCenter(-59.1696, -33.8111, 9); // Buenos Aires, Argentina Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru ////////////////////////////////////////////////////////////// // Map Layers ////////////////////////////////////////////////////////////// Map.addLayer({ eeObject: water_mask, visParams: VIS_WATER_MASK, name: '90% occurrence water mask', shown: false }); Map.addLayer({ eeObject: occurrence.updateMask(occurrence.divide(100)), name: 'Water Occurrence (1984-2015)', visParams: VIS_OCCURRENCE });
En la siguiente sección, explorarás cómo cambió la presencia de agua con el tiempo.