Skip to main content

async-geotiff

PyPI Conda Version

Fast, async GeoTIFF and Cloud-Optimized GeoTIFF (COG) reader for Python, wrapping the Rust-based Async-TIFF library.

Documentation website.
Introduction blog post

Features

  • Asynchronous, read-only support for GeoTIFF and COG formats.
  • High-level, familiar, easy to use API.
    • Load from full-resolution or reduced-resolution overviews as 3D NumPy arrays.
    • Simplify handling of nodata values and nodata masks with NumPy masked arrays.
    • Interpret Coordinate Reference Systems as PyProj CRS objects.
    • Find pixels with geotransforms exposed as Affine matrices.
    • Represent internal COG tile grids as TileMatrixSets via Morecantile integration.
  • Performance-focused:
    • Rust core ensures compiled performance.
    • CPU-bound image decoding happens in a thread pool, without blocking the async executor.
    • Buffer protocol integration for zero-copy data sharing between Rust and Python.
    • Request coalescing for adjacent tiles.
  • Lightweight with no GDAL dependency.
  • Access data from AWS S3, Google Cloud Storage, and Azure Storage via integration with obstore.
  • Full type hinting for all operations.
  • Broad decompression support: Deflate, JPEG, JPEG2000, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WebP, ZSTD.
  • Support for any arbitrary backend via obspec protocols.

Anti-Features

Features explicitly not in scope:

  • No pixel resampling.
  • No warping/reprojection.
  • Automatic resolution/overview selection

Resampling and warping bring significant additional complexity and are out of scope for this library. Consider using Async-GeoTIFF to load data, then Rasterio's In-Memory Files to resample or reproject data, if needed.

Example

First create a "store", such as an S3Store, GCSStore, AzureStore, or LocalStore for reading data from AWS S3, Google Cloud, Azure Storage, or local files. Refer to obstore documentation for more information.

from obstore.store import S3Store

store = S3Store("sentinel-cogs", region="us-west-2", skip_signature=True)
path = "sentinel-s2-l2a-cogs/12/S/UF/2022/6/S2B_12SUF_20220609_0_L2A/TCI.tif"

Then open a GeoTIFF:

from async_geotiff import GeoTIFF

geotiff = await GeoTIFF.open(path, store=store)

On the GeoTIFF instance you have metadata about the image, such as its affine transform and Coordinate Reference System:

geotiff.transform
# Affine(10.0, 0.0, 300000.0,
#        0.0, -10.0, 4100040.0)

geotiff.crs
# <Projected CRS: EPSG:32612>
# Name: WGS 84 / UTM zone 12N

For a COG, you can access the overviews, or reduced resolution versions, of the image:

# Overviews are ordered from finest to coarsest resolution
# In this case, access the second-coarsest resolution version of the image
overview = geotiff.overviews[-2]

Then we can read data from the image. This loads a 512-pixel square from the upper-left corner of the selected overview.

from async_geotiff import Window

window = Window(col_off=0, row_off=0, width=512, height=512)
array = await overview.read(window=window)

This RasterArray instance has data, mask, and some other metadata about the fetched array data.

Plot, using rasterio.plot.show (requires matplotlib):

import rasterio.plot

rasterio.plot.show(array.data)

Metadata

Release files for async-geotiff 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for async-geotiff 0.5.1
File Size Uploaded
async_geotiff-0.5.1.tar.gz 26.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-geotiff 0.5.1
File Interpreter ABI Platform
async_geotiff-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 60.7 kB

Release files / async_geotiff-0.5.1.tar.gz

Download URL async_geotiff-0.5.1.tar.gz
Size 26.7 kB
Tags Source
SHA-256 checksum
How to use checksums
673e7694a6d8a39a863215e9b1b1761b2b54e2555217c65f53d0042e8eda3e30
BLAKE2b-256 checksum
How to use checksums
5b513ccc7adc768b2e704917c06382ef013401b87e0e0433033580e781d3d647
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / async_geotiff-0.5.1-py3-none-any.whl

Download URL async_geotiff-0.5.1-py3-none-any.whl
Size 34.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
68a30a2f131f2dca95fb256c497afd25a8238098be37e068dfa96150a10a381c
BLAKE2b-256 checksum
How to use checksums
f3b9c348b19ab3845e177f08f51965db4b70ecd0563b114dbc5dcc4971b20cf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page