Para reducir las propiedades de los componentes en un FeatureCollection
, usa featureCollection.reduceColumns()
. Considera el siguiente ejemplo de juguete:
// 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
# 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'] ) )
Ten en cuenta que las entradas se ponderan según la propiedad weight
especificada. Por lo tanto, el resultado es el siguiente:
mean: 2.333333333333333
Como ejemplo más complejo, considera un FeatureCollection
de bloques del censo de EE.UU. con datos del censo como atributos. Las variables de interés son la población total y la cantidad total de unidades de vivienda. Para obtener sus sumas, proporciona un argumento de reductor de suma a reduceColumns()
y, luego, imprime el resultado:
// 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
# 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)
El resultado es un Dictionary
que representa la propiedad agregada según el reductor especificado:
sum: [85579,36245]
Ten en cuenta que el ejemplo anterior usa el filtro notNull()
para incluir solo atributos con entradas no nulas para las propiedades seleccionadas en la colección que se reduce.
Es recomendable verificar si hay entradas nulas para detectar datos faltantes inesperados y evitar errores que se produzcan a partir de cálculos que incluyan valores nulos.
Además, ten en cuenta que, a diferencia de imageCollection.reduce()
, en el que los reductores se repiten automáticamente para cada banda, los reductores en un FeatureCollection
deben repetirse de forma explícita con repeat()
. Específicamente, repite el reducer m veces para las entradas m. Es posible que se genere el siguiente error como resultado de no repetir
el reductor: