Mapping over a FeatureCollection

  • Use featureCollection.map() to apply the same operation to every Feature in a FeatureCollection.

  • The map() function can add new properties to features based on computations involving geometry or existing properties.

  • map() can also be used to generate an entirely new FeatureCollection, such as converting features to centroids while retaining selected properties.

To apply the same operation to every Feature in a FeatureCollection, use featureCollection.map(). For example, to add another area attribute to every feature in a watersheds FeatureCollection, use:

Code Editor (JavaScript)

// Load watersheds from a data table. var sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06'); // This function computes the feature's geometry area and adds it as a property. var addArea = function(feature) {  return feature.set({areaHa: feature.geometry().area().divide(100 * 100)}); }; // Map the area getting function over the FeatureCollection. var areaAdded = sheds.map(addArea); // Print the first feature from the collection with the added property. print('First feature:', areaAdded.first());

Python setup

See the Python Environment page for information on the Python API and using geemap for interactive development.

import ee import geemap.core as geemap

Colab (Python)

# Load watersheds from a data table. sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06') # Map an area calculation function over the FeatureCollection. area_added = sheds.map( lambda feature: feature.set( {'areaHa': feature.geometry().area().divide(100 * 100)} ) ) # Print the first feature from the collection with the added property. display('First feature:', area_added.first())

In the previous example, note that a new property is set based on a computation with the feature's geometry. Properties can also be set using a computation involving existing properties.

An entirely new FeatureCollection can be generated with map(). The following example converts the watersheds to centroids:

Code Editor (JavaScript)

// This function creates a new feature from the centroid of the geometry. var getCentroid = function(feature) {  // Keep this list of properties.  var keepProperties = ['name', 'huc6', 'tnmid', 'areasqkm'];  // Get the centroid of the feature's geometry.  var centroid = feature.geometry().centroid();  // Return a new Feature, copying properties from the old Feature.  return ee.Feature(centroid).copyProperties(feature, keepProperties); }; // Map the centroid getting function over the features. var centroids = sheds.map(getCentroid); // Display the results. Map.addLayer(centroids, {color: 'FF0000'}, 'centroids');

Python setup

See the Python Environment page for information on the Python API and using geemap for interactive development.

import ee import geemap.core as geemap

Colab (Python)

# This function creates a new feature from the centroid of the geometry. def get_centroid(feature): # Keep this list of properties. keep_properties = ['name', 'huc6', 'tnmid', 'areasqkm'] # Get the centroid of the feature's geometry. centroid = feature.geometry().centroid() # Return a new Feature, copying properties from the old Feature. return ee.Feature(centroid).copyProperties(feature, keep_properties) # Map the centroid getting function over the features. centroids = sheds.map(get_centroid) # Display the results. m = geemap.Map() m.set_center(-96.25, 40, 4) m.add_layer(centroids, {'color': 'FF0000'}, 'centroids') m

Note that only a subset of properties is propagated to the features in the new collection.