Чтобы преобразовать тип данных Image
(растр) в тип данных FeatureCollection
(вектор), используйте image.reduceToVectors()
. Это основной механизм векторизации в Earth Engine, который может быть полезен для создания регионов для ввода в другие типы редукторов. Метод reduceToVectors()
создает края полигона (возможно, центроиды или ограничивающие рамки) на границе однородных групп связанных пикселей.
Например, рассмотрим изображение Японии, сделанное в ночных огнях в 2012 году. Пусть цифровой номер ночника служит показателем интенсивности развития. Определите зоны, используя произвольные пороги на ночниках, объедините зоны в одноканальное изображение, векторизуйте зоны с помощью reduceToVectors()
:
Редактор кода (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
Колаб (Питон)
# 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
равно «false»). Последние два параметра, labelProperty
и reducer
, указывают, что выходные полигоны должны получить свойство с меткой зоны и средним значением полос ночного света соответственно.
Сопоставленный результат должен выглядеть примерно так, как область Токио, показанная на рисунке 1. Проверка выходных полигонов показывает, что каждый полигон имеет свойство, хранящее метку зоны ({1, 2, 3}) и среднее значение полосы ночных огней, поскольку указан редуктор среднего значения.
