Raster in Vektor umwandeln

Verwenden Sie image.reduceToVectors(), um von einem Image-Datentyp (Raster) in einen FeatureCollection-Datentyp (Vektor) zu konvertieren. Dies ist der primäre Mechanismus für die Vektorisierung in Earth Engine und kann zum Generieren von Regionen für die Eingabe in andere Arten von Reducern verwendet werden. Mit der Methode reduceToVectors() werden Polygonkanten (optional auch Mittelpunkte oder Begrenzungsrahmen) an der Grenze homogener Gruppen verbundener Pixel erstellt.

Angenommen, Sie haben ein Nachtlichtbild von Japan aus dem Jahr 2012. Die digitale Nummer des Nachtlichts dient als Proxy für die Entwicklungsintensität. Definieren Sie Zonen mit beliebigen Grenzwerten für die Nachtlichter, kombinieren Sie die Zonen zu einem Einzelbandbild und vektorisieren Sie die Zonen mit reduceToVectors():

Code-Editor (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');

Python einrichten

Auf der Seite Python-Umgebung finden Sie Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung.

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

Der erste Band in der Eingabe wird verwendet, um homogene Regionen zu identifizieren. Die verbleibenden Bänder werden gemäß dem angegebenen Reducer reduziert, dessen Ausgabe den resultierenden Vektoren als Eigenschaft hinzugefügt wird. Der Parameter geometry gibt den Umfang an, in dem die Vektoren erstellt werden sollen. Im Allgemeinen empfiehlt es sich, eine minimale Zone anzugeben, über die Vektoren erstellt werden sollen. Es empfiehlt sich auch, scale und crs anzugeben, um Unklarheiten zu vermeiden. Der Ausgabetyp ist ‘polygon’, wobei die Polygone aus homogenen Zonen mit vier verbundenen Nachbarn gebildet werden (d.h. eightConnected ist falsch). Die letzten beiden Parameter, labelProperty und reducer, geben an, dass die Ausgabepolygone ein Attribut mit dem Zonenlabel bzw. dem Mittelwert der Nachtlichtbänder erhalten sollen.

Das kartierte Ergebnis sollte in etwa so aussehen wie der Großraum Tokio in Abbildung 1. Die Ausgabepolygone enthalten jeweils ein Attribut, das das Label der Zone ({1, 2, 3}) und den Mittelwert des Nachtlichtbands speichert, da der Mittelwert-Reducer angegeben ist.

Ausgabe von „reduceToVectors“
Abbildung 1. Zonen mit Nachtbeleuchtung in Tokio, Japan Vektorgrenzen werden schwarz dargestellt.