Skip to main content

CloudOptimized GeoTIFF (COGEO) creation plugin for rasterio

Project description

Cloud Optimized GeoTIFF (COG) creation and validation plugin for Rasterio


Or install from source:


  • Create a Cloud Optimized Geotiff.
  • Check if a Cloud Optimized Geotiff is valid.


Default COGEO profiles

Profiles can be extended by providing ‘–co’ option in command line (e.g: rio cogeo mydataset.tif mydataset_zstd.tif -b 1,2,3 –profile deflate –co “COMPRESS=ZSTD” )


  • JPEG compression
  • PIXEL interleave
  • YCbCr colorspace
  • limited to uint8 datatype and 3 bands data


  • JPEG compression
  • PIXEL interleave
  • YCbCr colorspace
  • limited to uint8 datatype and 3 bands data


  • WEBP compression
  • PIXEL interleave
  • limited to uint8 datatype and 3 or 4 bands data
  • Available for GDAL>=2.4.0


  • ZSTD compression
  • PIXEL interleave
  • Available for GDAL>=2.3.0

Note in Nov 2018, there was a change in libtiff’s ZSTD tags which create incompatibility for old ZSTD compressed GeoTIFF link


  • LZW compression
  • PIXEL interleave


  • DEFLATE compression
  • PIXEL interleave


  • PACKBITS compression
  • PIXEL interleave


  • NO compression
  • PIXEL interleave

Default profiles are tiled with 512x512 blocksizes.

Overview levels

By default rio cogeo will calculate the optimal overview level based on dataset size and internal tile size (overview should not be smaller than internal tile size (e.g 512px). Overview level will be translated to decimation level of power of two.

Internal tile size

By default rio cogeo will create a dataset with 512x512 internal tile size. This can be updated by passing –co BLOCKXSIZE=64 –co BLOCKYSIZE=64 options.

Web tiling optimization

if the input dataset is aligned to web mercator grid, the internal tile size should be equal to the web map tile size (256 or 512px) output dataset is compressed,

if the input dataset is not aligned to web mercator grid, the tiler will need to fetch multiple internal tiles. Because GDAL can merge range request, using small internal tiles (e.g 128) will reduce the number of byte transfered and minimized the useless bytes transfered.

Nodata, Alpha and Mask

By default rio-cogeo will forward any nodata value or alpha channel to the output COG.

If your dataset type is Byte or Unit16, you could use internal bit mask (with the –add-mask option) to replace the Nodata value or Alpha band in output dataset (supported by most GDAL based backends).

Note: when adding a mask with an input dataset having an alpha band you’ll need to use the bidx options to remove it from the output dataset.


Using internal nodata value with lossy compression (webp, jpeg) is not recommanded. Please use internal masking (or alpha band if using webp)

Contribution & Development

The rio-cogeo project was begun at Mapbox and has been transferred in January 2019.

Issues and pull requests are more than welcome.

dev install

Python3.6 only

This repo is set to use pre-commit to run flake8, pydocstring and black (“uncompromising Python code formatter”) when commiting new code.


Blog post on good and bad COG formats:

Checkout rio-glui ( rasterio plugin to explore COG locally in your web browser.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
rio-cogeo-1.0b0.tar.gz (12.1 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page