Conversión de trama a vector

Para convertir de un Image (raster) a un tipo de datos FeatureCollection (vector), usa image.reduceToVectors(). Este es el mecanismo principal para la vectorización en Earth Engine y puede ser útil para generar regiones para la entrada a otros tipos de reductor. El método reduceToVectors() crea bordes de polígonos (centroides o cuadros de límites de forma opcional) en el límite de grupos homogéneos de píxeles conectados.

Por ejemplo, considera una imagen de luces nocturnas de Japón de 2012. Permite que el número digital de las luces nocturnas funcione como proxy de la intensidad de desarrollo. Define zonas con umbrales arbitrarios en las luces nocturnas, combina las zonas en una imagen de una sola banda y vectoriza las zonas con reduceToVectors():

// Load a Japan boundary from the Large Scale International Boundary dataset.
var japan = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
  .filter(ee.Filter.eq('country_na', 'Japan'));

// Load a 2012 nightlights image, clipped to the Japan border.
var nl2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
  .select('stable_lights')
  .clipToCollection(japan);

// Define arbitrary thresholds on the 6-bit nightlights image.
var zones = nl2012.gt(30).add(nl2012.gt(55)).add(nl2012.gt(62));
zones = zones.updateMask(zones.neq(0));

// Convert the zones of the thresholded nightlights to vectors.
var vectors = zones.addBands(nl2012).reduceToVectors({
  geometry: japan,
  crs: nl2012.projection(),
  scale: 1000,
  geometryType: 'polygon',
  eightConnected: false,
  labelProperty: 'zone',
  reducer: ee.Reducer.mean()
});

// Display the thresholds.
Map.setCenter(139.6225, 35.712, 9);
Map.addLayer(zones, {min: 1, max: 3, palette: ['0000FF', '00FF00', 'FF0000']}, 'raster');

// Make a display image for the vectors, add it to the map.
var display = ee.Image(0).updateMask(0).paint(vectors, '000000', 3);
Map.addLayer(display, {palette: '000000'}, 'vectors');

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap
# Load a Japan boundary from the Large Scale International Boundary dataset.
japan = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017').filter(
    ee.Filter.eq('country_na', 'Japan')
)

# Load a 2012 nightlights image, clipped to the Japan border.
nl_2012 = (
    ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
    .select('stable_lights')
    .clipToCollection(japan)
)

# Define arbitrary thresholds on the 6-bit nightlights image.
zones = nl_2012.gt(30).add(nl_2012.gt(55)).add(nl_2012.gt(62))
zones = zones.updateMask(zones.neq(0))

# Convert the zones of the thresholded nightlights to vectors.
vectors = zones.addBands(nl_2012).reduceToVectors(
    geometry=japan,
    crs=nl_2012.projection(),
    scale=1000,
    geometryType='polygon',
    eightConnected=False,
    labelProperty='zone',
    reducer=ee.Reducer.mean(),
)

# Display the thresholds.
m = geemap.Map()
m.set_center(139.6225, 35.712, 9)
m.add_layer(
    zones,
    {'min': 1, 'max': 3, 'palette': ['0000FF', '00FF00', 'FF0000']},
    'raster',
)

# Make a display image for the vectors, add it to the map.
display_image = ee.Image(0).updateMask(0).paint(vectors, '000000', 3)
m.add_layer(display_image, {'palette': '000000'}, 'vectors')
m

Ten en cuenta que la primera banda de la entrada se usa para identificar regiones homogéneas y que las bandas restantes se reducen según el reductor proporcionado, cuyo resultado se agrega como una propiedad a los vectores resultantes. El parámetro geometry especifica el alcance sobre el que se deben crear los vectores. En general, se recomienda especificar una zona mínima sobre la que crear vectores. También se recomienda especificar scale y crs para evitar ambigüedades. El tipo de salida es ‘polygon’, en el que los polígonos se forman a partir de zonas homogéneas de vecinos conectados por cuatro (es decir, eightConnected es falso). Los últimos dos parámetros, labelProperty y reducer, especifican que los polígonos de salida deben recibir una propiedad con la etiqueta de zona y el promedio de las bandas de luces nocturnas, respectivamente.

El resultado asignado debería verse como el área de Tokio que se muestra en la Figura 1. La inspección de los polígonos de salida indica que cada uno tiene una propiedad que almacena la etiqueta de la zona ({1, 2, 3}) y la media de la banda de luces nocturnas, ya que se especifica el reductor medio.

Salida de reduceToVectors
Figura 1: Zonas de luces nocturnas en el área de Tokio, Japón. Los límites de los vectores se muestran en negro.