Sie können Statistiken für jede Zone einer Image
oder FeatureCollection
abrufen, indem Sie mit reducer.group()
die Ausgabe eines Reduzierers nach dem Wert einer bestimmten Eingabe gruppieren. Um beispielsweise die Gesamtbevölkerung und die Anzahl der Wohneinheiten in jedem Bundesstaat zu berechnen, wird in diesem Beispiel die Ausgabe einer Reduzierung eines Zensusblocks FeatureCollection
so gruppiert:
// Load a collection of US census blocks. var blocks = ee.FeatureCollection('TIGER/2010/Blocks'); // Compute sums of the specified properties, grouped by state code. var sums = blocks .filter(ee.Filter.and( ee.Filter.neq('pop10', null), ee.Filter.neq('housing10', null))) .reduceColumns({ selectors: ['pop10', 'housing10', 'statefp10'], reducer: ee.Reducer.sum().repeat(2).group({ groupField: 2, groupName: 'state-code', }) }); // Print the resultant Dictionary. print(sums);
import ee import geemap.core as geemap
# Load a collection of US census blocks. blocks = ee.FeatureCollection('TIGER/2010/Blocks') # Compute sums of the specified properties, grouped by state code. sums = blocks.filter( ee.Filter.And( ee.Filter.neq('pop10', None), ee.Filter.neq('housing10', None) ) ).reduceColumns( selectors=['pop10', 'housing10', 'statefp10'], reducer=ee.Reducer.sum() .repeat(2) .group(groupField=2, groupName='state-code'), ) # Print the resultant Dictionary. display(sums)
Das Argument groupField
ist der Index der Eingabe im Array „selectors“, das die Codes enthält, nach denen gruppiert werden soll. Das Argument groupName
gibt den Namen der Property an, in der der Wert der Gruppierungsvariablen gespeichert werden soll. Da der Reducer nicht automatisch für jede Eingabe wiederholt wird, ist der Aufruf von repeat(2)
erforderlich.
Wenn Sie die Ausgabe von image.reduceRegions()
gruppieren möchten, können Sie ein Gruppierungsband angeben, das Gruppen anhand von ganzen Pixelwerten definiert. Diese Art der Berechnung wird manchmal als „Zonenstatistik“ bezeichnet, wobei die Zonen als Gruppierungsband angegeben und die Statistik vom Reducer ermittelt wird. Im folgenden Beispiel sind die Änderungen bei den Nachtlichtwerten in den USA nach Kategorie der Bodenbedeckung gruppiert:
// Load a region representing the United States var region = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017') .filter(ee.Filter.eq('country_na', 'United States')); // Load MODIS land cover categories in 2001. var landcover = ee.Image('MODIS/051/MCD12Q1/2001_01_01') // Select the IGBP classification band. .select('Land_Cover_Type_1'); // Load nightlights image inputs. var nl2001 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F152001') .select('stable_lights'); var nl2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012') .select('stable_lights'); // Compute the nightlights decadal difference, add land cover codes. var nlDiff = nl2012.subtract(nl2001).addBands(landcover); // Grouped a mean reducer: change of nightlights by land cover category. var means = nlDiff.reduceRegion({ reducer: ee.Reducer.mean().group({ groupField: 1, groupName: 'code', }), geometry: region.geometry(), scale: 1000, maxPixels: 1e8 }); // Print the resultant Dictionary. print(means);
import ee import geemap.core as geemap
# Load a region representing the United States region = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017').filter( ee.Filter.eq('country_na', 'United States') ) # Load MODIS land cover categories in 2001. landcover = ee.Image('MODIS/051/MCD12Q1/2001_01_01').select( # Select the IGBP classification band. 'Land_Cover_Type_1' ) # Load nightlights image inputs. nl_2001 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F152001').select( 'stable_lights' ) nl_2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012').select( 'stable_lights' ) # Compute the nightlights decadal difference, add land cover codes. nl_diff = nl_2012.subtract(nl_2001).addBands(landcover) # Grouped a mean reducer: change of nightlights by land cover category. means = nl_diff.reduceRegion( reducer=ee.Reducer.mean().group(groupField=1, groupName='code'), geometry=region.geometry(), scale=1000, maxPixels=1e8, ) # Print the resultant Dictionary. display(means)
In diesem Beispiel ist groupField
der Index des Bandes, das die Zonen enthält, nach denen die Ausgabe gruppiert werden soll. Das erste Band hat Index 0, das zweite Index 1 usw.