Skip to content

tonkintaylor/rastr

Repository files navigation


rastr

PyPI Version PyPI Supported Versions PyPI License

A lightweight geospatial raster datatype library for Python focused on simplicity.

For more details, read the documentation: https://rastr.readthedocs.io/en/stable/.

Overview

rastr provides an intuitive interface for creating, reading, manipulating, and exporting geospatial raster data in Python.

Features

  • ๐Ÿงฎ Complete raster arithmetic: Full support for mathematical operations (+, -, *, /) between rasters and scalars.
  • ๐Ÿ“Š Flexible visualization: Built-in plotting with matplotlib and interactive mapping with folium.
  • ๐Ÿ—บ๏ธ Geospatial analysis tools: Contour generation, Gaussian blurring, and spatial sampling.
  • ๐Ÿ› ๏ธ Data manipulation: Fill NaN values, extrapolate missing data, and resample to different resolutions.
  • ๐Ÿ”— Seamless integration: Works with GeoPandas, rasterio, and the broader Python geospatial ecosystem.
  • โ†”๏ธ Vector-to-raster workflows: Convert GeoDataFrame polygons, points, and lines to raster format.

Installation

# With uv
uv add rastr

# With pip
pip install rastr

Quick Start

from pyproj.crs.crs import CRS
from rasterio.transform import from_origin
from rastr import Raster, RasterMeta
from rastr.create import full_raster


# Create an example raster
raster = Raster.example()

# Write to and read from a file
raster.to_file("raster.tif")
raster = Raster.read_file("raster.tif")

# Basic arithmetic operations
doubled = raster * 2
summed = raster + 10
combined = raster + doubled

# Visualize the data
ax = raster.plot(cbar_label="Values")

# Interactive web mapping (requires folium)
m = raster.explore(opacity=0.8, colormap="plasma")

# Sample values at specific coordinates
xy_points = [(100.0, 200.0), (150.0, 250.0)]
values = raster.sample(xy_points)

# Generate contour lines
contours = raster.contour(levels=[0.1, 0.5, 0.9], smoothing=True)

# Apply spatial operations
blurred = raster.blur(sigma=2.0)  # Gaussian blur
filled = raster.extrapolate(method="nearest")  # Fill NaN values via nearest-neighbours
resampled = raster.resample(cell_size=0.5)  # Change resolution

# Export to file
raster.to_file("output.tif")

# Convert to GeoDataFrame for vector analysis
gdf = raster.as_geodataframe(name="elevation")

Quick Reference

from rastr import Raster

Data access

I/O

Geometric Operations

NaN Management and value replacements

Image Processing

Visualization

Cell-wise Operations

Limitations

Current version limitations:

  • Only Single-band rasters are supported.
  • In-memory processing only (streaming support planned).
  • Square cells only (rectangular cell support planned).
  • Only float dtypes (integer support planned).

Similar Projects

  • rasters is a project with similar goals of providing a dedicated raster datatype in Python with higher-level interfaces for GIS operations. Unlike rastr, it has support for multi-band rasters, and has some more advanced functionality for Earth Science applications. Both projects are relatively new and under active development.
  • rasterio is a core dependency of rastr and provides low-level raster I/O and processing capabilities.
  • rioxarray extends xarray for raster data with geospatial support via rasterio.

Contributing

See the CONTRIBUTING.md file.

About

Geospatial Raster datatype library for Python.

Resources

License

Contributing

Stars

Watchers

Forks

Contributors 7

Languages