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');
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.
