satellite imagery • Different satellites • Different sensor • Deep time and space distribution • How to find the right image? • By time and space • By attributes (cloud cover, snow cover, off nadir, ….) OpenSearch OGC OpenSearch Geo and Time OGC OpenSearch for EO • “OpenSearch for EO“ to the rescue
(by satellite/sensor), e.g. • Optical or SAR? • Supported resolutions • Availability of data in particular timeframe • Then search products in it, by • Time • Space • Cloud cover • …
metadata for collection • GML O&M for products • Links to OGC services (cross linking) • WMS/WMTS to see collection/product • WFS to get “masks” (validity, snow, cloud, …) • WCS to extract raster • Direct download to get original package
as OpenSearch for EO, more modern take on architecture • Collections and items • Allows cross collection search. • Based on OGC API, compatible with OGC API - Features
◦ Database ◦ OpenSearch EO ▪ GeoRSS ▪ GeoJSON ◦ STAC • They express the same information with different names OpenSearch EO GeoRSS OpenSearch EO GeoJSON STAC collections/items Database
to the rescue: ◦ The right “naming” is generated based on the output ◦ Public names are back-mapped to db names for filtering Database STAC Collections Items OpenSearch EO Search Templates
"$${env('stac_version', '1.0.0-rc2')}", "stac_extensions": [ // skip SAR sensors "$filter{eop:parentIdentifier LIKE 'SENTINEL%' or eop:parentIdentifier LIKE 'LANDSAT%'},https://stac-extensions.github.io/eo/v1.0.0/schema.json", "https://stac-extensions.github.io/view/v1.0.0/schema.json" ], "id": "${eop:identifier}", "type": "Feature", "geometry": "${footprint}", "bbox": [ "$${minx(footprint)}", "$${miny(footprint)}", "$${maxx(footprint)}", "$${maxy(footprint)}" ], "properties": { "start_datetime": "$filter{timeStart is not null and timeEnd is not null and timeStart <> timeEnd},${timeStart}", "end_datetime": "$filter{timeStart is not null and timeEnd is not null and timeStart <> timeEnd},${timeEnd}", "datetime": "$filter{timeStart is not null and (timeEnd is null or timeStart = timeEnd)},${timeStart}", ....
the imagery files • OpenSearch can point to the raw package, and the “granules” table allow to get to the single images • Where can they be located? ◦ Local file system (classic approach) ◦ HTTP server ◦ S3 or other blob storage
GeoTiff plugin (Boundless) ◦ COG plugin (Planet/GeoSolutions) • Old S3 plugin available for longer time, used by some production sites, but not maintained • COG plugin is new, and the way forward
blocks (configurable) • Read the full block even a small part of it is used • Eventual local memory/disk cache • Works best for smaller files and strong locality • Can read any GeoTIFF 5MB 5MB 5MB
header first • HTTP Range read of the tiles needed (coaleshe nearby tiles into single read) • Works against S3 and HTTP(s) • More blob storages incoming (Google Storage) • May get caching down the way Tile Tile Tile Tile Tile Tile R1 R2
can have different resolutions • Be in different file formats (faster if the format is uniform) • Have different color models, RGB, gray, paletted (needs JAI-EXT enabled) • Be in different coordinate reference systems
table of granules, their footprint, location, and extra attributes • Currently supported/tested sources: • PostGIS, Oracle Shapefile, h (no attr indexing, no timestamp) • H2 (local embedded db) • Can be customized to support custom granule indexes (e.g. legacy catalog)
• TIME and ELEVATION receive special treatment for WMS and WCS • Custom/Additional dimensions • Everything besides TIME & ELEVATION • They can be dynamically discovered from GetCapabilities/DescribeCoverage
used as a mosaic index • SQL Views selecting a particular collection sub/set • REST API to automatically create them Collection Product or Item Granule
to create a mosaic out of a STAC API • Filter to establish which items take part • https://github.com/joshfix/imagemosaic-stac • Outdated code, but promising concept • Needs STAC API to settle down (beta/changes in filtering) STAC API ImageMosaic STAC GeoTools ImageMosaic
upon with CQL • Can be sorted on using WFS like syntax • More possibilities than just Time and Elevation SENSOR = SAR AND SATELLITE=XYZ SORTBY = TIME D
to NODATA for lossy compressions • Vector and raster masks supported • Raster masks can be embedded (GDAL style) • Vector ones can be WKB or shapefiles • API to plug your own mask provider • Available for image mosaic and GDAL based data sources
the coverages are strictly related • E.g., U and V components of wind/current vectors • Merge them back into a single coverage as bands • Allows rendering engine to work with them both as one
file per band • Requirement, as they have different resolutions • Grab the band name from file, build a “band specific” coverage • Use coverage views to merge them together in a virtual multiband coverage • Smarts to read only the desired files when doing band selection
loosely • Expose NetCDF internal data as a set of 2D slices • Fast 2D (time, elevation) slice extraction • Supports NCML • GRIB supported by the same libraries, with same functionality
Allow the ImageMosaic to handle multiple files • Expose internal structure (times, elevations) • Make ImageMosaic handle slices of the file as granules • 5-dim mosaic (space/time/runtime other dimensions) Mosaic NetCDF 1 NetCDF 2 NetCDF … N …
multidimensional source • Several customizations to control output and preserve info if the source is a NetCDF itself • Source has to be multidimensional (current restriction)
and vector data Support custom dimensions Alter map on the fly to support band combination Wizard to configure EO layer groups • Product layer tree • Mix of vector and raster info • Raw data, flags (clouds, snow), browse
readers • Associate each file with EO metadata • Include such information in DescribeCoverage/DescribeEODataset • EODataset: multidimensional mosaic or NetCDF file • Describe the inner structure (granules listing) in DescribeEODataSet
+ Legacy Ingestion • Maritime Data • SAR Time Series • Oil Spill + other vectors • Single Mosaic + CQL + Custom Access Manager • Integrated SSO with MapStore • Precooked Download of Scenes • Fine grain control over data access • Download • Visualization • Clever usage of Mosaic Indexes via WFS
collect (strip) materialized as many files (granules) • Access filtering based on current user roles (custom data store implementation) • Custom stacking order (SORT BY) also user based if not already provided in the request Mosaic POSTGIS Custom store wrapper Postgis store