כדי להמיר מסוג נתונים 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');
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}) ואת הממוצע של הפס של התאורה בלילה, כי צוין המצמצם של הממוצע.
