Per convertire da un tipo di dati Image
(raster) a un tipo di dati FeatureCollection
(vettoriale), utilizza image.reduceToVectors()
. Si tratta del meccanismo primario per la vettorializzazione in Earth Engine e può essere utile per generare regioni da inserire in altri tipi di riduttori. Il metodo reduceToVectors()
crea i bordi dei poligoni (eventualmente centroidi o bounding box) al confine di
gruppi omogenei di pixel connessi.
Ad esempio, prendiamo un'immagine del Giappone con le luci notturne del 2012. Lascia che il numero digitale delle lampade notturne funga da sostituto dell'intensità dello sviluppo. Definisci le zone utilizzando soglie arbitrarie
sulle lampade notturne, combina le zone in un'immagine a banda singola, vettorizza le zone utilizzando
reduceToVectors()
:
Editor di codice (JavaScript)
// 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
Colab (Python)
# 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
Tieni presente che la prima banda nell'input viene utilizzata per identificare regioni omogenee e le altre bande vengono ridotte in base al riduttore fornito, il cui output viene aggiunto come proprietà ai vettori risultanti. Il parametro geometry
specifica l'intervallo in cui devono essere creati i vettori. In generale, è buona norma specificare una zona minima su cui creare i vettori. È buona prassi anche
specificare scale
e crs
per evitare ambiguità. Il tipo di output
è ‘polygon’
se i poligoni sono formati da zone omogenee di
vicini con quattro connessioni (ovvero eightConnected
è falso). Gli ultimi due parametri, labelProperty
e reducer
, specificano che i poligoni di output devono ricevere una proprietà con l'etichetta della zona e la media delle bande di luci notturne.
Il risultato mappato dovrebbe avere l'aspetto dell'area di Tokyo mostrata nella Figura 1. L'ispezione dei poligoni di output indica che ogni poligono ha una proprietà che memorizza l'etichetta della zona ({1, 2, 3}) e la media della fascia delle luci notturne, poiché è specificato il riduttore mediana.
