המרה מ-Raster ל-Vector

כדי להמיר מסוג נתונים Image (רסטרים) לסוג נתונים FeatureCollection (וקטורים), משתמשים ב-image.reduceToVectors(). זהו המנגנון הראשי ליצירת וקטורים ב-Earth Engine, והוא יכול להיות שימושי ליצירת אזורים להזנה של סוגי Reducer אחרים. השיטה reduceToVectors() יוצרת קצוות של פוליגונים (לחלופין, מרכזי מסה או תיבות מלבניות במקום זאת) בגבול של קבוצות הומוגניות של פיקסלים מחוברים.

לדוגמה, ניקח תמונה של אורות לילה ביפן משנת 2012. אפשר להשתמש במספר הדיגיטלי של נורות הלילה כמדד לעוצמת הפיתוח. מגדירים תחומים באמצעות ערכי סף שרירותיים בנורות הלילה, משלבים את התחומים בתמונה עם פס אחד, ומעבירים את התחומים לוקטור באמצעות 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

בדף סביבת Python מפורט מידע על Python API ועל השימוש ב-geemap לפיתוח אינטראקטיבי.

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

שימו לב שהרצועה הראשונה בקלט משמשת לזיהוי אזורים הומוגניים, והרצועות הנותרות מצטמצמות בהתאם למצמצם שסופק, והפלט שלו מתווסף כמאפיין לווקטורים התוצאתיים. הפרמטר geometry מציין את ההיקף שבו צריך ליצור את הווקטורים. באופן כללי, מומלץ לציין תחום מינימלי שבו ייווצרו וקטורים. מומלץ גם לציין את הערכים של scale ו-crs כדי למנוע אי-בהירות. סוג הפלט הוא ‘polygon’ כאשר הפוליגונים נוצרים מאזורים הומוגניים של שכנים שמחוברים בארבעה צירים (כלומר, eightConnected הוא שקר). שני הפרמטרים האחרונים, labelProperty ו-reducer, מציינים שצריך להקצות למשתני הפוליגון של הפלט מאפיין עם תווית האזור והממוצע של פסות התאורה בלילה, בהתאמה.

התוצאה הממופה אמורה להיראות כמו אזור טוקיו שמוצג באיור 1. בדיקה של הפוליגונים של הפלט מראה שלכל פוליגון יש מאפיין שמאחסן את התווית של האזור ({1, 2, 3}) ואת הממוצע של הפס של התאורה בלילה, כי צוין המצמצם של הממוצע.

הפלט של reduceToVectors
איור 1. תחומים של תאורת לילה באזור טוקיו, יפן. גבולות הווקטורים מוצגים בשחור.