Conversione da raster a vettoriale

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

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente Python.

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.

Output di reduceToVectors
Figura 1. Zone di illuminazione notturna nell'area di Tokyo, in Giappone. I confini dei vettori vengono visualizzati in nero.