Pour réduire les propriétés des éléments géographiques dans un FeatureCollection
, utilisez featureCollection.reduceColumns()
. Prenons l'exemple suivant:
Éditeur de code (JavaScript)
// Make a toy FeatureCollection. var aFeatureCollection = ee.FeatureCollection([ ee.Feature(null, {foo: 1, weight: 1}), ee.Feature(null, {foo: 2, weight: 2}), ee.Feature(null, {foo: 3, weight: 3}), ]); // Compute a weighted mean and display it. print(aFeatureCollection.reduceColumns({ reducer: ee.Reducer.mean(), selectors: ['foo'], weightSelectors: ['weight'] }));
import ee import geemap.core as geemap
Colab (Python)
# Make a toy FeatureCollection. a_feature_collection = ee.FeatureCollection([ ee.Feature(None, {'foo': 1, 'weight': 1}), ee.Feature(None, {'foo': 2, 'weight': 2}), ee.Feature(None, {'foo': 3, 'weight': 3}), ]) # Compute a weighted mean and display it. display( a_feature_collection.reduceColumns( reducer=ee.Reducer.mean(), selectors=['foo'], weightSelectors=['weight'] ) )
Notez que les entrées sont pondérées en fonction de la propriété weight
spécifiée. Le résultat est donc le suivant:
mean: 2.333333333333333
Prenons un exemple plus complexe : un FeatureCollection
de blocs de recensement des États-Unis avec des données de recensement comme attributs. Les variables d'intérêt sont la population totale et le nombre total de logements. Vous pouvez obtenir leur somme en fournissant un argument de réducteur de somme à reduceColumns()
et en imprimant le résultat:
Éditeur de code (JavaScript)
// Load US census data as a FeatureCollection. var census = ee.FeatureCollection('TIGER/2010/Blocks'); // Filter the collection to include only Benton County, OR. var benton = census.filter( ee.Filter.and( ee.Filter.eq('statefp10', '41'), ee.Filter.eq('countyfp10', '003') ) ); // Display Benton County census blocks. Map.setCenter(-123.27, 44.57, 13); Map.addLayer(benton); // Compute sums of the specified properties. var properties = ['pop10', 'housing10']; var sums = benton .filter(ee.Filter.notNull(properties)) .reduceColumns({ reducer: ee.Reducer.sum().repeat(2), selectors: properties }); // Print the resultant Dictionary. print(sums);
import ee import geemap.core as geemap
Colab (Python)
# Load US census data as a FeatureCollection. census = ee.FeatureCollection('TIGER/2010/Blocks') # Filter the collection to include only Benton County, OR. benton = census.filter( ee.Filter.And( ee.Filter.eq('statefp10', '41'), ee.Filter.eq('countyfp10', '003') ) ) # Display Benton County census blocks. m = geemap.Map() m.set_center(-123.27, 44.57, 13) m.add_layer(benton) display(m) # Compute sums of the specified properties. properties = ['pop10', 'housing10'] sums = benton.filter(ee.Filter.notNull(properties)).reduceColumns( reducer=ee.Reducer.sum().repeat(2), selectors=properties ) # Print the resultant Dictionary. display(sums)
La sortie est un Dictionary
représentant la propriété agrégée en fonction du réducteur spécifié:
sum: [85579,36245]
Notez que l'exemple ci-dessus utilise le filtre notNull()
pour n'inclure que les éléments avec des entrées non nulles pour les propriétés sélectionnées de la collection réduite.
Il est recommandé de vérifier les entrées nulles pour détecter les données manquantes inattendues et éviter les erreurs résultant de calculs incluant des valeurs nulles.
Notez également que, contrairement à imageCollection.reduce()
, dans lequel les réducteurs sont automatiquement répétés pour chaque bande, les réducteurs sur un FeatureCollection
doivent être explicitement répétés à l'aide de repeat()
. Plus précisément, répétez le réducteur m fois pour m entrées. L'erreur suivante peut être générée si vous ne répétez pas le réducteur: