Conversão de raster em vetor

Para converter de um tipo de dados Image (raster) para um FeatureCollection (vetor), use image.reduceToVectors(). Esse é o principal mecanismo de vetorização no Earth Engine e pode ser útil para gerar regiões para entrada em outros tipos de redutor. O método reduceToVectors() cria bordas de polígonos (ou, opcionalmente, centros de massa ou caixas delimitadoras) na fronteira de grupos homogêneos de pixels conectados.

Por exemplo, considere uma imagem de luzes noturnas de 2012 do Japão. Deixe o número digital de luzes noturnas servir como um proxy para a intensidade do desenvolvimento. Defina zonas usando limites arbitrários nas luzes noturnas, combine as zonas em uma imagem de banda única e vetorize as zonas usando reduceToVectors():

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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

A primeira faixa na entrada é usada para identificar regiões homogêneas, e as faixas restantes são reduzidas de acordo com o redutor fornecido, e a saída é adicionada como uma propriedade aos vetores resultantes. O parâmetro geometry especifica a extensão em que os vetores precisam ser criados. Em geral, é uma boa prática especificar uma zona mínima para criar vetores. Também é uma boa prática especificar scale e crs para evitar ambiguidades. O tipo de saída é ‘polygon’, em que os polígonos são formados a partir de zonas homogêneas de vizinhos conectados por quatro pontos (ou seja, eightConnected é falso). Os dois últimos parâmetros, labelProperty e reducer, especificam que os polígonos de saída precisam receber uma propriedade com o rótulo da zona e a média das bandas de luz noturna, respectivamente.

O resultado mapeado deve ser semelhante à área de Tóquio mostrada na Figura 1. A inspeção dos polígonos de saída indica que cada polígono tem uma propriedade que armazena o rótulo da zona ({1, 2, 3}) e a média da faixa de luzes noturnas, já que o redutor médio é especificado.

Saída de reduceToVectors
Figura 1. Zonas de luzes noturnas na área de Tóquio, Japão. Os limites do vetor são mostrados em preto.