7 ee.Feature
Los vectores (ee.Feature) en GEE son los objetos predeterminados para leer información vectorial o de tablas. Es importante recalcar que una ee.Feature es un vector individual, de modo que solo puede contener una sola geometría (polígono, línea, punto, multipunto, multipolígono).
7.1 Información y metadatos
Un vector estará compuesto por una geometría (punto, línea, polígono, multipolígono) y los atributos asociados a esa geometría (estos atributos son llamados propiedades y están almacenados en un diccionario; ver Olaya [2020] para una descripción más detallada de un vector). Para obtener información geométrica de los vectores se pueden utilizar los mismos métodos que un objeto ee.Geometry, mientras que para conocer características de las propiedades se puede utilizar el método .propertyNames.
7.2 Visualización de vectores
Las geometrías y vectores pueden ser visualizados en el mapa de GEE. El aspecto predeterminado de los vectores presenta líneas sólidas negras y un relleno semiopaco gris. Sin embargo, se puede especificar el color dentro de un diccionario en la función Map.addLayer, como código hexadecimal.
Los cambios de los parámetros de visualización de los vectores no pueden hacerse en las herramientas de capa del mapa, solo pueden hacerse desde el editor de código. Para consultar el código hexadecimal del color deseado se puede acceder al siguiente enlace: https://htmlcolorcodes.com/es/
// Especificar el color de la capa
Map.addLayer(vector , {}, 'capa por default');
Map.addLayer(vector, {color: '2AF116'}, 'capa color verde');
7.3 Creación de vectores
Para crear un vector desde cero es necesario definir una geometría y opcionalmente un diccionario de propiedades (atributos) asociados a esa geometría. Por ejemplo (Fig. 7.1):
Ejercicio 10
// Crear un polígono
var poligono = ee.Geometry.Polygon([
-119.24, 32.73,
-115.02, -3.29,
-66.5, -3.29,
-68.43, 32.14
;
])
// Crear un vector a partir del polígono y un diccionario de atributos.
var vector = ee.Feature(
// Polígono del vector
,
poligono// Diccionario de atributos con 3 atributos
anno: 1500,
{tamaño: '865 kilometros',
nombres:['hugo','paco','luis']});
7.4 Métodos comunes
Selección de propiedades
Una vez revisados los nombres de las propiedades de un vector, se pueden seleccionar ciertos atributos mediante el método .select. Para seleccionar una única propiedad solo se requiere indicar el nombre de esta (entre comillas dentro de una lista), mientras que si se desea seleccionar varias propiedades, estas deben indicarse dentro de una lista separadas por comas.
Adicionalmente, se pueden renombrar las propiedades del vector. Para ello se inserta primero una lista que contenga las propiedades a las que se les desea cambiar el nombre, seguida de una segunda lista con los nuevos nombres. Por ejemplo (Fig. 7.1): Ejercicio 10.1
print(vector.select(['anno']));
print(vector.select(['anno','tamaño']));
print(vector.select(['anno','tamaño'],['year','southamerica']));
Adición de nuevas propiedades o modificación de propiedades preexistentes
Usando el método .set se pueden modificar las propiedades preexistentes o escribir nuevas propiedades sobre el vector. En este caso, primero se indica el nombre de la clave, seguido del valor correspondiente a la clave indicada. Por ejemplo (Fig. 7.1):
Ejercicio 10.2
var vector1 = vector.set('tamaño','neotropico');
Extracción y edición de propiedades de vectores
En este ejercicio primero se selecciona un vector para ejemplificar el uso de algunos métodos de los objetos ee.Feature. Para ello, se extrae el primer vector de una colección de vectores utilizando el método .first. Este procedimiento se verá con mayor detalle en el siguiente capítulo, en los métodos de las colecciones de vectores. A continuación, se consultarán algunas propiedades y atributos del vector seleccionado (Fig. 7.2).
- Usamos el método .propertyNames para obtener una lista de los nombres de los atributos del vector.
- Usamos el método .toDictionary para generar un diccionario con todos los atributos (claves) y sus valores del vector.
- Usamos el método .get para obtener el valor del atributo ‘COAST’ del vector.
- Usando el método .select podemos seleccionar solamente una lista de atributos definidos, y si colocamos una segunda lista entonces los atributos de la primera lista serán renombrados con los nombres de la segunda.
Ejercicio 11
// Llamamos una capa de cuencas de alta resolución de GEE
// y se selecciona el primer vector de la colección
var cuenca = ee.Feature(
ee.FeatureCollection('WWF/HydroSHEDS/v1/Basins/hybas_12')
.first());
// Extraemos los nombres de los atributos del vector como una lista
var propiedades = cuenca.propertyNames();
// Extraemos los atributos del vector como un diccionario
var atributos = cuenca.toDictionary();
// Extraemos el atributo 'COAST'
var costa = cuenca.get('COAST');
// Extraemos el atributo 'COAST' y lo renombramos como 'costa maritima'
var renombre = cuenca.select(['COAST'],['costa maritima']);
Intersección con otros vectores
Se pueden realizar cortes de un vector para quedarse con el área específica que intersecta otro vector utilizando el método .intersection. Por ejemplo (Fig. 7.3):
Ejercicio 12
// Crear dos vectores rectangulares
var rectangulo1 = ee.Feature(ee.Geometry.Rectangle(-92.0,10.6,-82.0,20.7));
var rectangulo2 = ee.Feature(ee.Geometry.Rectangle(-86.03,15.6,-100.0,40.7));
// Intersección
var interseccion = rectangulo1.intersection(rectangulo2);
Al realizar una intersección, el vector resultante heredará los atributos del vector al que se le aplicó dicho método (es decir, el objeto que queda del lado izquierdo del método .intersection).
Creación de un buffer
Para realizar un buffer a partir de un vector se utiliza el método .buffer, en el cual hay que indicar el valor en metros del tamaño del buffer y el error máximo aceptado (Fig. 7.3).
Ejercicio 12.1
// Crear un vector de un punto
var punto = ee.Feature(ee.Geometry.Point(-105.24, -2.73));
// Calcular un buffer de 500 km alrededor del punto
var bufferPol = punto.buffer(500000, 0.1);
Cálculo de área
Para calcular el área de un vector se utiliza el método .area. En este caso hay que definir el valor máximo de error aceptado. El área siempre se calcula en metros cuadrados (Fig. 7.3).
Ejercicio 12.2
// Calcular el área del buffer
var area = bufferPol.area(0.1);
Cálculo de perímetro
Podemos calcular el perímetro de un vector usando el método .perimeter, que hace el cálculo en metros (Fig. 7.3).
Ejercicio 12.3
// Calcular el perímetro del buffer
var perimetro = interseccion.perimeter();
Disolución de polígonos
El método .dissolve une todas las geometrías que se intersectan de un vector en un solo polígono y si no se intersectan, genera un multipolígono (Fig. 7.3).
Ejercicio 12.4
// Crear un vector de multipolígono
var multi = ee.Feature(ee.Geometry.MultiPolygon(
-137, 20], [-128, 9], [-116, 15],[-124, 25]]],
[[[[-123, 28], [-129, 30], [-139, 5]]],
[[[-113, 19], [-143, 18], [-123, 4]]],
[[[-133, 1], [-118, 2], [-116, 24]]],
[[[-109, 5], [-103, 10], [-147, 9]]],
[[[-110, 14], [-160, 12], [-161, 7]]],
[[[-117, -1], [-117, -2], [-136, -9]]],
[[[-121, -1], [-123, -1], [-126, -18]]]]));
[[[// Disolver sus geometrías
var disuelto = ee.Feature(multi.dissolve(0.1));
Unión de vectores
El método .union permite fusionar las geometrías de dos vectores en una sola geometría de un vector. Las geometrías que están intersectadas serán disueltas y las que no lo estén se convertirán en un multipolígono (Fig. 7.3).
Ejercicio 12.5
// Unir geometrías del buffer y un rectángulo
var union = rectangulo2.union(bufferPol)