Stay organized with collectionsSave and categorize content based on your preferences.
To apply the same operation to everyFeaturein aFeatureCollection, usefeatureCollection.map(). For example,
to add another area attribute to every feature in a watershedsFeatureCollection, use:
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 newFeatureCollectioncan be generated withmap().
The following example converts the watersheds to centroids:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-06-03 UTC."],[[["\u003cp\u003e\u003ccode\u003efeatureCollection.map()\u003c/code\u003e applies an operation to each \u003ccode\u003eFeature\u003c/code\u003e within a \u003ccode\u003eFeatureCollection\u003c/code\u003e, enabling modifications or calculations on a feature-by-feature basis.\u003c/p\u003e\n"],["\u003cp\u003eThis function can be used to add new properties based on geometric calculations or existing property values, illustrated by calculating and adding an area property to each feature.\u003c/p\u003e\n"],["\u003cp\u003eIt is also possible to generate an entirely new \u003ccode\u003eFeatureCollection\u003c/code\u003e by applying a transformation function that creates new features, as demonstrated by converting polygons to their centroids.\u003c/p\u003e\n"],["\u003cp\u003eWhen creating new features within the \u003ccode\u003emap()\u003c/code\u003e function, selective property propagation is achievable, allowing control over which attributes are transferred to the new \u003ccode\u003eFeatureCollection\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Mapping over a FeatureCollection\n\nTo apply the same operation to every `Feature` in a\n`FeatureCollection`, use `featureCollection.map()`. For example,\nto add another area attribute to every feature in a watersheds\n`FeatureCollection`, use:\n\n### Code Editor (JavaScript)\n\n```javascript\n// Load watersheds from a data table.\nvar sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06');\n\n// This function computes the feature's geometry area and adds it as a property.\nvar addArea = function(feature) {\n return feature.set({areaHa: feature.geometry().area().divide(100 * 100)});\n};\n\n// Map the area getting function over the FeatureCollection.\nvar areaAdded = sheds.map(addArea);\n\n// Print the first feature from the collection with the added property.\nprint('First feature:', areaAdded.first());\n```\nPython setup\n\nSee the [Python Environment](/earth-engine/guides/python_install) page for information on the Python API and using\n`geemap` for interactive development. \n\n```python\nimport ee\nimport geemap.core as geemap\n```\n\n### Colab (Python)\n\n```python\n# Load watersheds from a data table.\nsheds = ee.FeatureCollection('USGS/WBD/2017/HUC06')\n\n# Map an area calculation function over the FeatureCollection.\narea_added = sheds.map(\n lambda feature: feature.set(\n {'areaHa': feature.geometry().area().divide(100 * 100)}\n )\n)\n\n# Print the first feature from the collection with the added property.\ndisplay('First feature:', area_added.first())\n```\n\nIn the previous example, note that a new property is set based on a computation with the\nfeature's geometry. Properties can also be set using a computation involving existing\nproperties.\n\nAn entirely new `FeatureCollection` can be generated with `map()`.\nThe following example converts the watersheds to centroids:\n\n### Code Editor (JavaScript)\n\n```javascript\n// This function creates a new feature from the centroid of the geometry.\nvar getCentroid = function(feature) {\n // Keep this list of properties.\n var keepProperties = ['name', 'huc6', 'tnmid', 'areasqkm'];\n // Get the centroid of the feature's geometry.\n var centroid = feature.geometry().centroid();\n // Return a new Feature, copying properties from the old Feature.\n return ee.Feature(centroid).copyProperties(feature, keepProperties);\n};\n\n// Map the centroid getting function over the features.\nvar centroids = sheds.map(getCentroid);\n\n// Display the results.\nMap.addLayer(centroids, {color: 'FF0000'}, 'centroids');\n```\nPython setup\n\nSee the [Python Environment](/earth-engine/guides/python_install) page for information on the Python API and using\n`geemap` for interactive development. \n\n```python\nimport ee\nimport geemap.core as geemap\n```\n\n### Colab (Python)\n\n```python\n# This function creates a new feature from the centroid of the geometry.\ndef get_centroid(feature):\n # Keep this list of properties.\n keep_properties = ['name', 'huc6', 'tnmid', 'areasqkm']\n # Get the centroid of the feature's geometry.\n centroid = feature.geometry().centroid()\n # Return a new Feature, copying properties from the old Feature.\n return ee.Feature(centroid).copyProperties(feature, keep_properties)\n\n# Map the centroid getting function over the features.\ncentroids = sheds.map(get_centroid)\n\n# Display the results.\nm = geemap.Map()\nm.set_center(-96.25, 40, 4)\nm.add_layer(centroids, {'color': 'FF0000'}, 'centroids')\nm\n```\n\nNote that only a subset of properties is propagated to the features in the new collection."]]