ArcGIS Pro

Build a Heat Risk Index for Local Climate Planning: Part 2 of 3

Use a Raster Function to Derive Lack of Tree Canopy

This blog is part 2 of 3 in a series that walks through the steps to use a global collection of ready-to-use geographic information to derive input variables needed to calculate a heat risk index (HRI). Local communities can use the resulting intervention-focused map to prioritize census tracts for tree planting as one mitigation against urban heat islands.

Part 1 of this series explored step #1 of the heat risk index workflow, deriving land surface temperature from multispectral Landsat data. Now we continue with step #2, calculating the lack of tree canopy using a derived tree cover data set.

Refresh your memory of Part 1 and continue the workflow below.

Add Data from the Living Atlas of the World

Similar to the first blog, we need the appropriate source data from ArcGIS Living Atlas of the World. The second input for the HRI is the lack of tree canopy. This is derived from the European Space Agency WorldCover 2020 Land Cover imagery service. Using the Add Data button, search the Living Atlas for “ESA WorldCover” and add it to the project. Be sure Living Atlas is selected under Portal on the left before typing your search text.

The Add Data pane showing ESA WorldCover text search.
Use the Add Data pane to add an image service to your project.

ESA WorldCover is a global landcover data set utilizing 11 different land cover classes. The following steps will describe how to isolate only the tree cover pixels.

ESA WorldCover image service in the Map Window.
ESA WorldCover classified land cover data.

Isolate the Tree Cover Classification

The lack of tree canopy is calculated using the formula ‘100 – Percent Tree Canopy’. This requires you to isolate the WorldCover data to only pixels classified as Tree Cover. The Item Details page for the image service indicates that tree cover pixels have a value of ’10’. The Remap Raster Function allows you to remap all pixels so that only the tree cover remains.

With the ESA WorldCover item selected in Contents, click the Imagery tab on the Ribbon and then click Raster Functions.

Open the Remap Raster Function either by searching for it or expanding the Reclass heading and selecting it. Next, complete the data entry pane displayed below and click the Create new layer button.

Remap Raster Function Pane with remap values.
Remap pixels to isolate tree canopy.

The raster function output will display as a new layer in Contents. This raster function remaps tree cover pixels to a value of 1 and everything else to 0.

Copy the Result

Copying this result allows you to focus on your area of interest instead of working with the entire global data set. If you have been following this blog series, you should already have the Seville Census Sections in your project for the next step. If not, review the section titled “Filter the Service by Location” in blog #1, here, for the steps to add and filter the census polygons.

Use the Copy Raster Geoprocessing tool and copy to TIF format. You will need to enter an output file location that is a folder and give it a name ending in .tif. TIF files may not be output to file geodatabases.

Copy Raster tool pane with TIF format specified.
Copy the result to TIF format and give it a name.

While not necessary, if you wish to visualize the tree canopy data, you can apply the following symbology settings.

Symbology pane showing Condition Number scheme, Min-Max stretch type, and Custom settings.
Optional symbology settings.

Run Zonal Statistics as Table

Now that the tree canopy raster covering your area of interest has been copied to a local file, you are ready for the next step. You will use the same census polygons for Seville, Spain that you used in the previous blog. You can find it here if you need to go back and review it.

You will use the Zonal Statistics as Table tool to count the number of tree cover pixels within each census polygon. The tool also counts the total number of pixels within each zone (polygon), so you can calculate the percentage of the polygon pixels covered with trees.

Open the Zonal Statistics as Table Geoprocessing tool. Select the Seville census polygon layer for Input Raster or Feature Zone Data, ID for Zone Field, the previous tree canopy output you just copied as the Input Value Raster and select Sum as Statistics Type.

Zonal Statistics as Table pane with zones, input, and statistics type specified.
Use the polygons as zones, tree canopy raster as value, and sum as statistics type.

Calculate Lack of Tree Canopy

The results of the Zonal Statistics tool look something like the image below. There is a count of total pixels within each polygon zone called ‘COUNT’ and the sum of tree cover pixels called ‘SUM. ‘ By remapping the tree cover pixels’ values to 1’s and everything else to 0’s in the previous step, summing the values will give the count of tree cover pixels. This allows you to divide the ‘SUM’ attribute by the ‘COUNT’ attribute to get a percentage of each polygon that is tree cover.

Attribute table showing output from Zonal Statistics as Table GP tool.
The results of Zonal Statistics as Table.

Use the Calculate Field tool and the following formulas to calculate the percent tree cover and percent lacking tree cover for each census polygon.

PCT_Tree_Cover = (Sum / Count) * 100 and PCT_Lacking = 100 - PCT_Tree_Cover
Formulas to use for calculating lack of tree cover.

After you run these calculations, the attribute table should look like this.

Attribute table showing output from Calculate Field tool.
Calculate the percentages using Calculate Field.

Leave these results in the table for now. In the final blog, you will combine the three inputs into a single table for additional processing.


This completes the workflow for preparing the second input to the HRI. First, you isolated tree cover pixels in the ESA WorldCover 2020 Land Cover date set using Living Atlas data and extracted the data for your area of interest. Next, you summarized the count of tree cover pixels falling within each census boundary. Finally, you calculated the percentage of each polygon that contains tree pixels, and that lacks tree pixels.

Part 3, and the final blog of this series, explores how to calculate the population density for each census polygon and how to combine all three inputs into the HRI.

About the author

I am a Senior Product Engineer for Esri in Redlands, CA specializing in global data sets. I currently do work in support local climate resilience planning and mitigation using online data. I use a lot of Python, Jupyter Notebooks, and raster datasets in my daily work. I bring my experiences in aerospace engineering and information technology to help improve and automate global data processing workflows. Feel free to contact me at with questions or comments.

Inline Feedbacks
View all comments

Next Article

Join Hacktoberfest 2023: Celebrate Open Source with Us!

Read this article