Quickstart⚓︎
There are a couple of ways to read a GeoTIFF with cog3pio's Python bindings into
either CPU memory or CUDA GPU memory.
Take your pick:
| Output | CUDA-acceleration | DLPack protocol | any dtype |
|---|---|---|---|
| PyCapsule | ✅ / ❌ | ✅ | ✅ |
| numpy | ❌ | ✅ | ❌ |
Notes:
- DLPack - an in-memory tensor structure
- Currently supported dtypes include:
- On CPU: uint (u8/u16/u32/u64), int (i8/i16/i32/i64) and float (f16/f32/f64)
- On CUDA: uint (u8/u16/u32/u64), int (i8/i16/i32/i64) and float (f32/f64)
PyCapsule (DLPack)⚓︎
Read a GeoTIFF file from a HTTP url via the CudaCogReader or
CogReader class into an object that conforms to the
Python Specification for DLPack,
whereby the __dlpack__() method returns a
PyCapsule object containing
a DLManagedTensorVersioned
object.
import cupy as cp
from cog3pio import CudaCogReader
cog = CudaCogReader(
path="https://github.com/OSGeo/gdal/raw/v3.11.0/autotest/gcore/data/float32.tif",
device_id=0
)
assert hasattr(cog, "__dlpack__")
assert hasattr(cog, "__dlpack_device__")
array: cp.ndarray = cp.from_dlpack(cog)
assert array.shape == (400,) # (1, 20, 20)
assert array.dtype == "float32"
# or with Pytorch>=2.9.0, after https://github.com/pytorch/pytorch/pull/145000
# tensor: torch.Tensor = torch.from_dlpack(cog)
# ...
import numpy as np
from cog3pio import CogReader
cog = CogReader(
path="https://github.com/OSGeo/gdal/raw/v3.11.0/autotest/gcore/data/float16.tif"
)
assert hasattr(cog, "__dlpack__")
assert hasattr(cog, "__dlpack_device__")
array: np.ndarray = np.from_dlpack(cog)
assert array.shape == (1, 20, 20)
assert array.dtype == "float16"
# or with Pytorch>=2.9.0, after https://github.com/pytorch/pytorch/pull/145000
# tensor: torch.Tensor = torch.from_dlpack(cog)
# ...
NumPy⚓︎
Read a GeoTIFF file from a HTTP url via the read_geotiff
function into a numpy.ndarray (akin to
rasterio).
import numpy as np
from cog3pio import read_geotiff
# Read GeoTIFF into a numpy array
array: np.ndarray = read_geotiff(
path="https://github.com/cogeotiff/rio-tiler/raw/6.4.0/tests/fixtures/cog_nodata_nan.tif"
)
assert array.shape == (1, 549, 549) # bands, height, width
assert array.dtype == "float32"
Note
The read_geotiff function is a convenience function that
supports reading single or multi-band GeoTIFF files into a float32 array only. If
you wish to read into other dtypes (e.g. uint16), please use the
DLPack method instead which supports reading into
different dtypes.