Skip to content

Land Cover & Vegetation

Class Key params Returns Data source Description
EsaWorldCover land_cover_class=None, year=2020 raster ESA WorldCover (GEE ESA/WorldCover/v100/v200) Global 10m land cover classification, optionally filtered to one class via EsaWorldCoverClass.
LandCoverGlad year=2020 raster GEE projects/glad/GLCLU2020 Raw GLAD global land cover/land use classification for a given year.
LandCoverSimplifiedGlad year=2020 raster derived from LandCoverGlad Reclassifies raw GLAD codes into a simplified 0–10 class scheme.
LandCoverHabitatGlad year=2020 raster derived from LandCoverSimplifiedGlad Binary habitat mask (natural classes 1–6 = habitat).
LandCoverHabitatChangeGlad start_year=2000, end_year=2020 raster derived from LandCoverHabitatGlad (two years) Habitat-change code: gained vs. lost habitat between two years.
NaturalAreas year=2020 raster derived from EsaWorldCover Binary "natural area" mask reclassified from ESA WorldCover.
TreeCover min_tree_cover=None, max_tree_cover=None raster GEE projects/wri-datalab/TropicalTreeCover + TTC-nontropics Merged global tropical/non-tropical percent tree cover.
TreeCanopyHeight height=None, index_aggregation=False, worldpop_version=1 raster GEE Meta CanopyHeight Global tree canopy height (meters), optionally aligned to WorldPop grid.
TreeCanopyHeightCTCM height=None raster same Meta canopy-height collection CTCM-workflow variant of canopy height (buffered then trimmed to AOI).
TreeCanopyCoverMask height=None, percentage=30 raster derived from TreeCanopyHeight Binary tree-canopy-cover mask thresholded by % cover.
NdviSentinel2 year=2021, min_threshold=None raster GEE COPERNICUS/S2_HARMONIZED NDVI computed from Sentinel-2, optionally binarized at a threshold.
FractionalVegetationPercent min_threshold=None, year=2025, index_aggregation=False, worldpop_version=1 raster GEE Dynamic World + S2 SR + Cloud Score+ Percent vegetation fraction via NDVI endmember unmixing.
VegetationWaterMap start_date, end_date, greenwater_layer raster Sentinel-2 (cloud-masked) Annual NDVI/NDWI trend composites; gain/loss vegetation-water change masks.
OpenUrban band='b1' raster GEE projects/wri-datalab/cities/OpenUrban High-resolution urban land-use/land-cover classification (buildings, roads, parking, green space) via OpenUrbanClass.

API

city_metrix.layers.esa_world_cover.EsaWorldCover

EsaWorldCover(land_cover_class: EsaWorldCoverClass = None, year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = ['land_cover_class']

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

STAC_CATALOG_URI class-attribute instance-attribute

STAC_CATALOG_URI = 'https://services.terrascope.be/stac/'

STAC_COLLECTION_ID class-attribute instance-attribute

STAC_COLLECTION_ID = 'urn:eop:VITO:ESA_WorldCover_10m_2020_AWS_V1'

STAC_ASSET_ID class-attribute instance-attribute

STAC_ASSET_ID = 'ESA_WORLDCOVER_10M_MAP'

Attributes: land_cover_class: Enum value from EsaWorldCoverClass year: year used for data retrieval

land_cover_class instance-attribute

land_cover_class = land_cover_class

year instance-attribute

year = year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.esa_world_cover.EsaWorldCoverClass

Bases: Enum

TREE_COVER class-attribute instance-attribute

TREE_COVER = 10

SHRUBLAND class-attribute instance-attribute

SHRUBLAND = 20

GRASSLAND class-attribute instance-attribute

GRASSLAND = 30

CROPLAND class-attribute instance-attribute

CROPLAND = 40

BUILT_UP class-attribute instance-attribute

BUILT_UP = 50

BARE_OR_SPARSE_VEGETATION class-attribute instance-attribute

BARE_OR_SPARSE_VEGETATION = 60

SNOW_AND_ICE class-attribute instance-attribute

SNOW_AND_ICE = 70

PERMANENT_WATER_BODIES class-attribute instance-attribute

PERMANENT_WATER_BODIES = 80

HERBACEOUS_WET_LAND class-attribute instance-attribute

HERBACEOUS_WET_LAND = 90

MANGROVES class-attribute instance-attribute

MANGROVES = 95

MOSS_AND_LICHEN class-attribute instance-attribute

MOSS_AND_LICHEN = 100

city_metrix.layers.glad_lulc.LandCoverGlad

LandCoverGlad(year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: year: year used for data retrieval

year instance-attribute

year = year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.glad_lulc.LandCoverSimplifiedGlad

LandCoverSimplifiedGlad(year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: year: year used for data retrieval

year instance-attribute

year = year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.glad_lulc.LandCoverHabitatGlad

LandCoverHabitatGlad(year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: year: year used for data retrieval

year instance-attribute

year = year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.glad_lulc.LandCoverHabitatChangeGlad

LandCoverHabitatChangeGlad(start_year=2000, end_year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: start_year: baseline year for habitat change end_year: target year for habitat change

start_year instance-attribute

start_year = start_year

end_year instance-attribute

end_year = end_year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.natural_areas.NaturalAreas

NaturalAreas(year=2020, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

year instance-attribute

year = year

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.tree_cover.TreeCover

TreeCover(min_tree_cover=None, max_tree_cover=None, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = ['min_tree_cover', 'max_tree_cover']

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

NO_DATA_VALUE class-attribute instance-attribute

NO_DATA_VALUE = 255

Merged tropical and nontropical tree cover from WRI Attributes: min_tree_cover: minimum tree-cover values used for filtering results max_tree_cover: maximum tree-cover values used for filtering results

min_tree_cover instance-attribute

min_tree_cover = min_tree_cover

max_tree_cover instance-attribute

max_tree_cover = max_tree_cover

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.tree_canopy_height.TreeCanopyHeight

TreeCanopyHeight(height=None, index_aggregation=False, worldpop_version=1, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = ['height', 'worldpop_version']

NO_DATA_VALUE class-attribute instance-attribute

NO_DATA_VALUE = 0

Attributes: height: minimum tree height used for filtering results

height instance-attribute

height = height

index_aggregation instance-attribute

index_aggregation = index_aggregation

worldpop_version instance-attribute

worldpop_version = worldpop_version

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.tree_canopy_height_for_ctcm.TreeCanopyHeightCTCM

TreeCanopyHeightCTCM(height=None, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = ['height']

NO_DATA_VALUE class-attribute instance-attribute

NO_DATA_VALUE = 0

Attributes: height: minimum tree height used for filtering results

height instance-attribute

height = height

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.tree_canopy_cover_mask.TreeCanopyCoverMask

TreeCanopyCoverMask(height=None, percentage=30, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = ['height', 'percentage']

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

Attributes: spatial_resolution: raster resolution in meters (see https://github.com/stac-extensions/raster) height: minimum tree height used for filtering results

height instance-attribute

height = height

percentage instance-attribute

percentage = percentage

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.ndvi_sentinel2_gee.NdviSentinel2

NdviSentinel2(year=2021, min_threshold=None, **kwargs)

Bases: Layer

" NDVI = Sentinel-2 Normalized Difference Vegetation Index return: a rioxarray-format DataArray Author of associated Jupyter notebook: Ted.Wong@wri.org Notebook: https://github.com/wri/cities-cities4forests-indicators/blob/dev-eric/scripts/extract-VegetationCover.ipynb Reference: https://en.wikipedia.org/wiki/Normalized_difference_vegetation_index

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: year: The satellite imaging year.

year instance-attribute

year = year

min_threshold instance-attribute

min_threshold = min_threshold

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.fractional_vegetation_percent.FractionalVegetationPercent

FractionalVegetationPercent(min_threshold=None, year=2025, index_aggregation=False, worldpop_version=1, **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = ['min_threshold']

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = ['worldpop_version']

min_threshold instance-attribute

min_threshold = min_threshold

year instance-attribute

year = year

index_aggregation instance-attribute

index_aggregation = index_aggregation

worldpop_version instance-attribute

worldpop_version = worldpop_version

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.vegetation_water_map.VegetationWaterMap

VegetationWaterMap(start_date='2016-01-01', end_date='2022-12-31', greenwater_layer='startgreenwaterIndex', **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = ['greenwater_layer']

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

Attributes: start_date: starting date for data retrieval end_date: ending date for data retrieval greenwater_layer: select returned layer from 'startgreenwaterIndex'/'endgreenwaterIndex'/'lossgreenwaterSlope'/'gaingreenwaterSlope'

start_date instance-attribute

start_date = start_date

end_date instance-attribute

end_date = end_date

greenwater_layer instance-attribute

greenwater_layer = greenwater_layer

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = DEFAULT_SPATIAL_RESOLUTION, resampling_method=None)

city_metrix.layers.open_urban.OpenUrban

OpenUrban(band='b1', **kwargs)

Bases: Layer

OUTPUT_FILE_FORMAT class-attribute instance-attribute

OUTPUT_FILE_FORMAT = GTIFF_FILE_EXTENSION

MAJOR_NAMING_ATTS class-attribute instance-attribute

MAJOR_NAMING_ATTS = None

MINOR_NAMING_ATTS class-attribute instance-attribute

MINOR_NAMING_ATTS = None

PROCESSING_TILE_SIDE_M class-attribute instance-attribute

PROCESSING_TILE_SIDE_M = 5000

band instance-attribute

band = band

get_data

get_data(bbox: GeoExtent, spatial_resolution: int = None, resampling_method: str = None)

city_metrix.layers.open_urban.OpenUrbanClass

Bases: Enum

GREEN_SPACE_OTHER class-attribute instance-attribute

GREEN_SPACE_OTHER = 110.0

BUILT_UP_OTHER class-attribute instance-attribute

BUILT_UP_OTHER = 120.0

BARREN class-attribute instance-attribute

BARREN = 130.0

PUBLIC_OPEN_SPACE class-attribute instance-attribute

PUBLIC_OPEN_SPACE = 200.0

WATER class-attribute instance-attribute

WATER = 300.0

PARKING class-attribute instance-attribute

PARKING = 400.0

ROADS class-attribute instance-attribute

ROADS = 500.0

BUILDINGS_UNCLASSIFIED class-attribute instance-attribute

BUILDINGS_UNCLASSIFIED = 600.0

BUILDINGS_UNCLASSIFIED_LOW_SLOPE class-attribute instance-attribute

BUILDINGS_UNCLASSIFIED_LOW_SLOPE = 601.0

BUILDINGS_UNCLASSIFIED_HIGH_SLOPE class-attribute instance-attribute

BUILDINGS_UNCLASSIFIED_HIGH_SLOPE = 602.0

BUILDINGS_RESIDENTIAL class-attribute instance-attribute

BUILDINGS_RESIDENTIAL = 610.0

BUILDINGS_RESIDENTIAL_LOW_SLOPE class-attribute instance-attribute

BUILDINGS_RESIDENTIAL_LOW_SLOPE = 611.0

BUILDINGS_RESIDENTIAL_HIGH_SLOPE class-attribute instance-attribute

BUILDINGS_RESIDENTIAL_HIGH_SLOPE = 612.0

BUILDINGS_NON_RESIDENTIAL class-attribute instance-attribute

BUILDINGS_NON_RESIDENTIAL = 620.0

BUILDINGS_NON_RESIDENTIAL_LOW_SLOPE class-attribute instance-attribute

BUILDINGS_NON_RESIDENTIAL_LOW_SLOPE = 621.0

BUILDINGS_NON_RESIDENTIAL_HIGH_SLOPE class-attribute instance-attribute

BUILDINGS_NON_RESIDENTIAL_HIGH_SLOPE = 622.0