Conversion de raster en vecteur

Pour convertir un type de données Image (raster) en type de données FeatureCollection (vectoriel), utilisez image.reduceToVectors(). Il s'agit du mécanisme principal de vectorisation dans Earth Engine. Il peut être utile pour générer des régions à fournir à d'autres types de réducteurs. La méthode reduceToVectors() crée des bords de polygone (éventuellement des centres de gravité ou des cadres de délimitation) à la limite de groupes homogènes de pixels connectés.

Prenons l'exemple d'une image de nuit du Japon en 2012. Laissez le nombre numérique des veilleuses servir de proxy pour l'intensité du développement. Définissez des zones à l'aide de seuils arbitraires sur les veilleuses, combinez les zones dans une image à bande unique, vectorisez les zones à l'aide de reduceToVectors():

Éditeur de code (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');

Configuration de Python

Consultez la page Environnement Python pour en savoir plus sur l'API Python et l'utilisation de geemap pour le développement interactif.

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

Notez que la première bande de l'entrée est utilisée pour identifier les régions homogènes et que les autres bandes sont réduites en fonction du réducteur fourni, dont la sortie est ajoutée en tant que propriété aux vecteurs résultants. Le paramètre geometry spécifie l'étendue sur laquelle les vecteurs doivent être créés. En règle générale, il est recommandé de spécifier une zone minimale sur laquelle créer des vecteurs. Il est également recommandé de spécifier scale et crs pour éviter toute ambiguïté. Le type de sortie est ‘polygon’, où les polygones sont constitués de zones homogènes de voisins à quatre connexions (c'est-à-dire que eightConnected est faux). Les deux derniers paramètres, labelProperty et reducer, spécifient que les polygones de sortie doivent recevoir une propriété avec le libellé de zone et la moyenne de la ou des bandes de lumières nocturnes, respectivement.

Le résultat cartographié doit ressembler à la zone de Tokyo illustrée dans la figure 1. L'inspection des polygones de sortie indique que chaque polygone possède une propriété stockant le libellé de la zone ({1, 2, 3}) et la moyenne de la bande des veilleuses, car le réducteur de la moyenne est spécifié.

Sortie de reduceToVectors
Figure 1. Zones de lumières nocturnes dans la région de Tokyo, au Japon. Les limites des vecteurs sont affichées en noir.