Aby przekonwertować dane typu Image
(raster) na dane typu FeatureCollection
(wektory), użyj funkcji image.reduceToVectors()
. Jest to podstawowy mechanizm wektoryzacji w Earth Engine. Może być przydatny do generowania regionów na potrzeby innych typów reduktora. Metoda reduceToVectors()
tworzy krawędzie wielokąta (opcjonalnie środki ciężkości lub prostokąty ograniczające) na granicy jednorodnych grup połączonych pikseli.
Weźmy na przykład obraz Japonii z 2012 r. przedstawiający światła nocne. Użyj liczby cyfrowej nocnego światła jako przybliżonego wskaźnika intensywności rozwoju. Określ strefy za pomocą dowolnych progów na lampach nocnych, połącz strefy w jeden obraz w jednym paśmie, a następnie zwektoryzuj strefy za pomocą:reduceToVectors()
Edytor kodu (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
Pamiętaj, że pierwszy pasmo wejściowe służy do identyfikowania jednorodnych regionów, a pozostałe pasma są zmniejszane zgodnie z podawanym reduktorem, którego dane wyjściowe są dodawane jako właściwości do wektorów wynikowych. Parametr geometry
określa zakres, w którym mają być tworzone wektory. Ogólnie rzecz biorąc, dobrym rozwiązaniem jest określenie minimalnej strefy, w której mają być tworzone wektory. Warto też określić wartości scale
i crs
, aby uniknąć niejednoznaczności. Typ wyjściowy to ‘polygon’
, gdzie wielokąty są tworzone z jednorodnych stref sąsiadów połączonych na 4 strony (czyli eightConnected
ma wartość false). Ostatnie dwa parametry, labelProperty
i reducer
, określają, że wyjściowe wielokąty powinny otrzymać odpowiednio atrybuty z nazwą strefy i średnią z pasm nocnego światła.
Wynik mapowania powinien wyglądać podobnie jak obszar Tokio na rysunku 1. Z analizy poligonów wyjściowych wynika, że każdy poligon ma właściwość przechowującą etykietę strefy ({1, 2, 3}) i średnią z pasma nocnego światła, ponieważ podano reduktor średniej.
