Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Sensor readers

Per-sensor reader designs in georeader

UNEP
IMEO
MARS

Status: index of per-sensor reader designs. Scope: the design of the reader classes for specific sensor families being migrated into georeader from rs_tools. Each per-sensor design specifies the file format, metadata parsing, calibration, and how the reader fits into one of georeader’s existing patterns (S2-style affine GeoData, or PRISMA-style raw-arrays-plus-lons/lats). Audience: anyone implementing a new sensor reader in georeader, or trying to figure out which sensor goes with which existing pattern.


What goes here

Per-sensor reader designs land here when:

  1. The sensor is a candidate for migration into georeader — typically from rs_tools or a similar prototyping repo.

  2. The reader follows one of two existing patterns (Track A or Track B below) but has sensor-specific quirks worth documenting before implementation.

  3. The work fits into one or more focused issues rather than a single trivial PR.

The companion to this directory is georeader/ — the reader-protocol reconciliation design, which keeps today’s GeoData / GeoDataBase Protocols and adds an AsyncGeoData Protocol that all readers (current and future) will conform to. That design is about the interface; this directory is about concrete sensor implementations that satisfy it.


The two tracks

georeader already has two patterns for reader implementations, distinguished by the geometry of the data on disk:

TrackGeometryExisting examplesPattern
A — clean affineSensor data sits on a regular grid in a standard CRS; the file format ships an affine transform (or one is recoverable from metadata).Sentinel-2 SAFE, LandsatReader subclasses GeoData. Reads route through read.read_from_bounds.
B — irregular geolocationSensor data is a raw array with per-pixel lons / lats; no honest affine.EMIT, PRISMA, EnMAP (curvilinear-but-orthorectified)Reader exposes raw arrays + geolocation; downstream calls griddata.read_to_crs to resample to a regular grid.

Most new sensors fit one of these two patterns. The per-sensor design docs in this directory specify which track applies and what sensor-specific glue is needed.


Current designs

DesignSensorsTrack
geostationary.mdGOES-R ABI, MSG SEVIRI, MTG-FCI, Himawari AHIA for ABI/FCI (clean +proj=geos), B for SEVIRI/AHI (irregular file formats)
modis.mdMODIS (Aqua/Terra), VIIRS (S-NPP / NOAA-20/21), planned: AVHRR, Sentinel-3 OLCI/SLSTR, AVIRIS-NGB (curvilinear scanners; per-pixel lons/lats is the only honest description)

Both designs share structure: User Story / Motivation / Mathematics / Target API / Example Use Cases / Subtasks / Open Design Questions. They reference each other directly because the geostationary readers were designed first and the MODIS family followed the same template.


Future candidates

These are sensor families that might land here as the migration progresses:

When a candidate becomes a real design, it lands here as a sibling to the existing files.


Connections to other designs

DesignHow sensor readers touch it
Reader reconciliationAll readers (existing and new) conform to the GeoData (sync) or AsyncGeoData (async) Protocol surface defined there. The Protocol locks the interface; this directory specifies the per-sensor implementations.
GeodatabaseA GeoCatalog indexes files; the reader is what’s used to open one row’s file. The reader_class=... kwarg on CatalogPipeline selects which reader (and therefore which sensor pattern) is in use.
Core types — GeoSliceOnce a reader satisfies GeoData.read_geoslice(slice) (or the AsyncGeoData async equivalent), it slots into the sampler/loader pipeline regardless of which track it follows.
geotoolz.mdSensor-preset operators in geotoolz.presets.* (S2, EMIT, EnMAP, ...) wrap the readers specified in this directory.

Conventions