Skip to main content

georaffer

Download German and Czech orthophotos and DSM tiles as GeoTIFF. Supports NRW, RLP, BB, BW, BY, TH, and CZ.

Installation

pip (macOS, Linux x86, Windows)

pip install georaffer

conda-forge (all platforms incl. Linux ARM64)

git clone https://github.com/michaelschleiss/georaffer
cd georaffer
conda create -n georaffer libgdal-jp2openjpeg lazrs-python laspy rasterio -c conda-forge
conda activate georaffer
pip install -e .

Or with pixi:

git clone https://github.com/michaelschleiss/georaffer
cd georaffer
pixi install

Usage

# From 4Seasons dataset
georaffer pygeon /data/4seasons/campaign --output ./tiles

# From CSV with coordinates
georaffer csv coords.csv --cols lon,lat --output ./tiles

# From bounding box
georaffer bbox 6.9,50.9,7.1,51.1 --output ./tiles

# From existing GeoTIFF footprint
georaffer tif ./area.tif --output ./tiles

# From specific tile indices
georaffer tiles 362,5604 --output ./tiles

See georaffer --help for all options. By default, downloads target NRW, RLP, BW, and BY; use --region to select others (e.g., --region bb th cz).

When using the tif command, aligned outputs are written to ./tiles/aligned/ and match the reference GeoTIFF grid (CRS, pixel size, width/height, and bounds). Alignment currently requires all processed tiles to share the same CRS; mixed-zone runs (for example NRW/RLP zone 32 plus BB zone 33) will fail and should be split by zone.

Python API

from georaffer import TileStore

store = TileStore(path="./tiles", regions=["NRW", "RLP"], imagery_from=(2015, None))

# Query tiles at 1km grid coordinates
tiles = store.query(coords=(350, 5600), tile_type="image")

# Retrieve (downloads + converts if needed)
path = store.get(tiles[0], resolution=2000)

# Batch with pipelined download/convert
paths = store.get_many(tiles, resolution=2000)

For single-file conversion without TileStore:

from georaffer.conversion import convert_file

convert_file("raw/image/tile.jp2", "processed", resolution=2000)

File name scheme

Raw downloads keep the provider filenames:

  • NRW orthophotos (JP2): dop10rgbi_32_<grid_x>_<grid_y>_<n>_nw_<year>.jp2
  • NRW DSM (LAZ): bdom50_32_<grid_x>_<grid_y>_<n>_nw_<year>.laz
  • RLP orthophotos (JP2): dop20rgb_32_<grid_x>_<grid_y>_2_rp_<year>.jp2
  • RLP DSM (LAZ): bdom20rgbi_32_<grid_x>_<grid_y>_2_rp.laz
  • BB DOP/DSM (ZIP): dop_<zone><grid_x>-<grid_y>.zip, bdom_<zone><grid_x>-<grid_y>.zip
  • BW DOP/DSM (ZIP): dop20rgb_32_<grid_x>_<grid_y>_2_bw.zip, dom1_32_<grid_x>_<grid_y>_2_bw.zip
  • BY DOP (TIF): 32<grid_x>_<grid_y>.tif or 32<grid_x>_<grid_y>_<year>.tif
  • BY DSM (TIF): 32<grid_x>_<grid_y>_20_DOM.tif
  • TH DOP (ZIP): dop20rgb_32_<grid_x>_<grid_y>_<n>_th_<year>.zip
  • TH DSM (ZIP): las_32_<grid_x>_<grid_y>_1_th_<year_range>.zip
  • CZ orthophotos (JP2): oi_<grid_x>_<grid_y>_<year>.jp2
  • CZ DSM (TIF/LAZ): dmpok_<grid_x>_<grid_y>_<year>.tif, or dmp1g_<grid_x>_<grid_y>_<year>.laz as fallback

Processed GeoTIFFs use a unified UTM-based pattern:

  • <region>_<zone>_<easting>_<northing>_<year>.tif

where:

  • <region> is nrw, rlp, bb, bw, by, th, or cz
  • <zone> is the UTM zone (32 for NRW/RLP/BW/BY/TH, 33 for BB/CZ)
  • <easting> and <northing> are UTM coordinates of the tile’s south‑west corner in meters (for example 350000,5600000)
  • <year> is the acquisition year inferred from the source filename or LAZ header (falls back to latest when no year is available)

When large source tiles are split into smaller output tiles (for example RLP 2km → 1km grid), filenames still follow this pattern and the easting/northing encode the sub‑tile coordinates, e.g. rlp_32_362500_5604500_2023.tif.

Output directory structure

With --output ./tiles the pipeline creates:

./tiles
├── raw
│   ├── image        # Provider orthophotos (JP2, TIF, or ZIP depending on region)
│   └── dsm          # Provider DSM tiles (LAZ, TIF, or ZIP depending on region)
└── processed
    ├── image
    │   └── <pixels>/      # Orthophoto GeoTIFFs (tile size in pixels, e.g. 2000 for 0.5 m/px on 1 km tiles)
    ├── dsm
    │   └── <pixels>/      # DSM GeoTIFFs with the same convention

<pixels> matches the internal resolution derived from --pixel-size (meters per pixel). For example, with the default --pixel-size 0.5 on a 1 km grid, georaffer produces processed/image/2000/ and processed/dsm/2000/.

Raw tiles remain cached under raw/, so you can re-run conversions with different resolutions without re-downloading.

Adding New Regions

Subclass BaseDownloader and implement:

  • parse_catalog() - Parse the region's tile feed/catalog
  • grid_to_filename() - Convert grid coordinates to download URL
  • utm_to_grid_coords() - Convert UTM to the region's grid system

See georaffer/downloaders/nrw.py as reference.

Data Sources and Licensing

German states publish orthophotos and elevation models as open data—free for commercial and non-commercial use—under EU High-Value Datasets Regulation 2023/138 and the INSPIRE Directive, coordinated nationally by the AdV (Arbeitsgemeinschaft der Vermessungsverwaltungen). Czech data comes from ČÚZK, which has published it as free open data since July 2023.

Region Provider License
NRW Geobasis NRW dl-de/zero-2-0
RLP LVermGeo RLP dl-de/by-2-0 ¹
BB LGB Brandenburg dl-de/by-2-0 ¹
BW LGL BW dl-de/by-2-0 ²
BY LDBV Bayern CC BY 4.0 ³
TH GDI-Th dl-de/by-2-0 ⁴
CZ ČÚZK CC BY 4.0 ⁵

¹ Attribution: © GeoBasis-DE / <provider>, <year>, dl-de/by-2-0 ² Attribution: Datenquelle: LGL, www.lgl-bw.de ³ Attribution: Bayerische Vermessungsverwaltung – www.geodaten.bayern.de ⁴ Attribution: © GDI-Th ⁵ Attribution: © ČÚZK, CC BY 4.0

License

MIT

Metadata

Release files for georaffer 0.2.0

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

Source distribution (sdist)

Source distribution for georaffer 0.2.0
File Size Uploaded Provenance Actions
georaffer-0.2.0.tar.gz 268.9 kB With provenance Details for georaffer-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for georaffer 0.2.0
File Interpreter ABI Platform Actions
georaffer-0.2.0-py3-none-any.whl Python 3 none any Details for georaffer-0.2.0-py3-none-any.whl

Total release size: 398.3 kB

Release files / georaffer-0.2.0.tar.gz

Download URL georaffer-0.2.0.tar.gz
Size 268.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f1b103ae7ab641c172017e00756166c4e7e5fc70f57ed9aea2853d405e572013
BLAKE2b-256 checksum
How to use checksums
f3a233eeac935aefa3d5d0d2a47b737bf412d9fbbaefc2021da5eb60a5d0f9ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 28, 2026.

Transparency log

Release files / georaffer-0.2.0-py3-none-any.whl

Download URL georaffer-0.2.0-py3-none-any.whl
Size 129.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d177a8637013c2ed62c87ec22a65b384e85ab2e8811dcbd6da751a1c91e5298a
BLAKE2b-256 checksum
How to use checksums
3b2a68e4b5b9f62817ab796f795879b7511572a10521e71cee949f27cc4ea60d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 28, 2026.

Transparency log

Security for georaffer 0.2.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for georaffer-0.2.0.tar.gz

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 Sep 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

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