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