LULC mapping V3 USA - wri/cities-OpenUrban GitHub Wiki
Land-use/land-cover version 3
Land use/land cover (LULC) mapping of urban surfaces. This page documents the methods (R script) used to generate the LULC Version 3 maps for the Smart Surfaces Coalition (SSC) 10 U.S. cities. LULC data is generated in the local State Plane coordinate system with a 1-meter spatial resolution to cover the bounds of the U.S. Decennial Census 2020 urbanized areas unioned with the core city boundaries provided by the SSC.
Google Earth Engine (GEE) App to explore the data.
Datasets
- Open Street Maps
- Accessed through Overpass API
- ESA Worldcover
- Accessed through GEE: 'ESA/WorldCover/v200'
- ParkServe
- Accessed through GEE: 'projects/wri-datalab/USA_ParkServe_Parks'
- WRI Urban Land Use
- Accessed through GEE: 'projects/wri-datalab/cities/urban_land_use/V1'
- Global Human Settlement Layer Average Net Building Height
- Accessed through GEE: 'projects/wri-datalab/GHSL/GHS-BUILT-H-ANBH_R2023A'
- Google-Microsoft Open Buildings Dataset
- Accessed through GEE: 'projects/sat-io/open-datasets/VIDA_COMBINED/USA'
Methods
Create grid
- Create a bounding box of the city geometry, buffer by 804.672 m (half a mile), and create a covering grid (currently 0.15° x 0.15°) and select only the gridcells that intersect with the city geometry. These are the tile extents.
Roads data
- For each gridcell, download roads from open street maps using the following values key pairs and save the line geometries.
OSM Key | OSM Value |
---|---|
"highway" | "residential", "service", "unclassified", "tertiary", "secondary", "primary", "turning_circle", "living_street", "trunk", "motorway", "motorway_link", "trunk_link", "primary_link", "secondary_link", "tertiary_link", "motorway_junction", "turning_loop", "road", "mini_roundabout", "passing_place", "busway" |
- Summarize the average number of lanes per road type (highway value) for the entire ciy and take the ceiling.
The remaining steps are repeated for each grid cell buffered by 100 meters to ensure overlap between tiles and mitigate any edge effects.
ESA Worldcover
Load the ESA Worldcover data as an earth engine object and filter to the area of interest (AOI). Mosaic the image collection into a single image and reclassify. Download at a 1-m resolution to match the desired output resolution in the local state plane epsg.
Combined LULC category | Value | Original ESA category |
---|---|---|
NoData | 0 | ND |
Green | 1 | Tree, Shrubland, Grassland, Cropland |
Built up | 2 | Built up |
Barren | 3 | Barren |
Water | 4 | Snow/ice, Permanent water bodies, Herbaceous wetland, Mangroves |
Public open space
- Download the open space data from OSM. Combine polygons and multipolygons and rasterize to match the ESA raster with a LULC value of 10. If there is are no public open space features, create a constant raster of value 0. Load the ParkServe data as an earth engine object and filter to the AOI. Reduce the features to an image with a value of 10. Download at a 1-m resolution in the local state plane epsg. Combine the open space and ParkServe rasters by taking the maximum value.
OSM Key | OSM Value |
---|---|
"leisure" | "pitch", "park", "garden", "playground", "nature_reserve", "golf_course", "common", "dog_park", "recreation_ground", "disc_golf_course" |
"boundary" | "protected_area", "national_park", "forest_compartment", "forest" |
Water
- Download the water data from OSM. Combine polygons and multipolygons and rasterize to match the ESA raster with a LULC value of 20. If there is are no water features, create a constant raster of value 0.
OSM Key | OSM Value |
---|---|
"water" | |
"natural" | "water" |
"waterway" |
Roads
- Load the downloaded roads file and assign roads with missing lane information the average number of lanes by road type. Buffer the roads by half the value of the number of lanes multiplied by 10 ft (3.048 m) [National Association of City Transportation Officials](https://nacto.org/publication/urban-street-design-guide/street-design-elements/lane-width/#:~:text=wider%20lane%20widths.-,Lane%20widths%20of%2010%20feet%20are%20appropriate%20in%20urban%20areas,be%20used%20in%20each%20direction) with flat caps and mitred joins. Rasterize to match the ESA raster with a LULC value of 30.
Buildings
- Load the WRI Urban Land Use (ULU) data as an earth engine object, select the 'lulc' band, and reduce from image collection to image using the first non-null. Reclass the raster values. Download in the image projection for the AOI.
Combined category | Value | Original ULU category |
---|---|---|
Non-residential | 1 | 0 (open space), 1 (non-res) |
Residential | 2 | 2 (Atomistic), 3 (Informal), 4 (Formal), 5 (Housing project) |
-
Load the average net building height (ANBH) data as an earth engine object, select the 'b1' band, mosaic the image collection to an image and download in the image projection for the AOI.
-
Get buildings from OSM (key = building) (this will likely be replaced or supplemented with the combined Google-Microsoft Building Footprints). Combine polygons and multipolygons.
-
Load the Google-Microsoft Open Buildings Dataset as an earth engine object and filter to the AOI. Download the feature collection.
-
Discard features from both buildings feature collections with invalid geometries.
-
Intersect the Open Buildings feature class with the OSM buildings and keep only those that do not intersect (are not included in OSM). Merge the two feature classes. Discard any 3-d geometries or features that are a geometry collection that might throw an error.
-
Reproject the buildings to match the ULU data and extract the mode to the buildings. This indicates whether the building is in a residential or non-residential area.
-
Reproject the buildings to match the ANBH data and extract the mean to the buildings. This represents the average surrounding building height.
-
Reproject the buildings to the local state plane epsg and calculate the building footprint.
-
Classify the buildings. The prediction model is a classification tree that sorts the buildings into low-slope and high-slope basing the decision on the average net building height, the ULU classification (residential or non-residential) and the building footprint size.
-
Assign the buildings to LULC classes based on slope and ULU. Note that currently the model never classifies buildings as residential low slope.
LULC Class | Value |
---|---|
Residential high slope | 41 |
Non-residential high slope | 42 |
Unclassified high slope | 43 |
Residential low slope | 44 |
Non-residential low slope | 45 |
Unclassified low slope | 46 |
- Rasterize to match the ESA raster.
Parking
- Get parking from OSM, combine polygons and multipolygons, rasterize to match ESA with LULC value of 50. If there are no parking lot features, create a constant raster with value 0.
OSM key | OSM value |
---|---|
"parking" | |
"amenity" | "parking" |
Combine rasters
- Combine the rasters taking the maximum value of each pixel. Write the raster to a Google Engine Asset
LULC Class | Value |
---|---|
Green space (other) | 1 |
Built up (other) | 2 |
Barren | 3 |
Public open space | 10 |
Water | 20 |
Roads | 30 |
Residential high slope | 41 |
Non-residential high slope | 42 |
Unclassified high slope | 43 |
Residential low slope | 44 |
Non-residential low slope | 45 |
Unclassified low slope | 46 |
Parking | 50 |