Visualize, Download, and Use ESRI 10m Global Land Cover Dataset in QGIS using QGIS Actions and COGs

Abdul Raheem Siddiqui
4 min readJul 15, 2021
Title Image: The Sprawling City of Karachi Land Use Land Cover Map

Impact Observatory, ESRI, and Microsoft AI for Earth have recently teamed up to create a global 10-meter land cover dataset. Although the dataset has received its fair share of criticism and may contain errors at few places, it is still one of its kind datasets because it is

- High resolution (10m)
- Global
- Up to date (2020)

Never before a land cover dataset of these qualities has been released. The dataset was developed from European Space Agency (ESA) Sentinel-2 satellite imagery by classifying images into ten different land cover classes using a machine learning model.

Image 1. Ten different land cover classes in the dataset ©ESRI

This LULC is being served by ESRI as an ArcGIS-ImageServer here:

https://tiledimageservices.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/Esri_2020_Land_Cover_V2/ImageServer

ESRI users can load it in ArcGIS, but open-source lovers, aka QGIS users, can’t consume this service. This is because QGIS does not yet have the capability to visualize this ESRI specific format. Even if it had, it would have only visualized it, and the dataset would not have been able to be used as input to raster analysis or as input to any geoprocessing tool that requires raster input since it would just have been an image.

The good news is that QGIS can load GDAL Cloud Optimized GeoTiffs (COGs) directly, and the source data of this LULC 2020 layer is stored on the cloud as COGs, 701 of them in total.

A Cloud Optimized GeoTIFF (COG) is a regular GeoTIFF file hosted on the cloud, with an internal organization that supports HTTP GET range requests, asking for just the parts of a file needed, thus being efficient.

Now to load LULC 2020 COGs in QGIS, we need to know two things:

1. The URL of GeoTiff on the cloud for our AOI
2. How to load a COG in QGIS

Although we can totally load the LULC 2020 dataset by knowing the above two things, we don’t have to. There is an easier way available, thanks to a workflow created by Thomas gratier that uses QGIS Actions and ESRI Feature Service to make loading the LULC dataset a breeze. “A QGIS action is something that happens when you click on a feature”. Actions can be defined via python scripts. (further learning: QGIS Actions: Deep Dive with Ujaval Gandhi)

The workflow involves

  1. Adding a coverage grid layer to QGIS with COGs URL.
  2. Adding actions to the layer as shown in image 2. (Don’t freak. You will not have to do this yourself, keep reading!)
  3. Right-clicking on any box of the layer with Identify Feature tool and choosing Add Geotiff Action as shown in image 3.
Image 2. Adding QGIS Actions to a layer
Image 3. QGIS Actions in action

To make everyone’s life easier, I have saved the coverage grid created by ESRI with actions already added to it (by Thomas Gratier) and made it available at this Github Gist (make sure when you save this file the extension is .qlr). So now you need to do only step 1 and 3. Give it a try and see the magic happen.

You can load as many COGs as you can but be mindful that COGs performance depends on the bandwidth available.

The best thing about COGs is that once loaded; they can be consumed as any other raster. If you want faster performance or don’t want to be continuously dependent on the internet, you can clip the raster to your AOI. You can use the GDAL Clip Raster by Extent Tool to do this.

Fig 4. Download the source resolution clip of the original GeoTiff

You can also pass the loaded COGs to other geoprocessing tools like Raster Calculator and Zonal Statistics.

Finally, if you are in the United States and want to download NLCD Land Cover data instead of this dataset, check out my Curve Number Plugin Tool below. Beside other things, it can download NCLD land cover dataset of any area within the contiguous United States.

--

--