Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

55
Serving EO Data with GeoServer Addressing real-world EO requirements With GeoServer Ing. Simone Giannecchini Ing. Daniele Romagnoli Ing. Andrea Aime GeoSolutions

Transcript of Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Page 1: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Serving EO Data with GeoServer

Addressing real-world EO requirementsWith GeoServer

Ing. Simone GiannecchiniIng. Daniele Romagnoli

Ing. Andrea AimeGeoSolutions

Page 2: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

GeoSolutions Founded in Italy in late 2006 Expertise

• Image Processing, GeoSpatial Data Fusion• Java, Java Enterprise, C++, Python• JPEG2000, JPIP, Advanced 2D visualization

Supporting/Developing FOSS4G projects GeoServer, MapStore GeoNetwork, GeoNode, Ckan

Clients Public Agencies Private Companies

http://www.geo-solutions.itFOSS4G 2016, Bonn

22nd – 26th August 2016

Page 3: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Reference scenario

REP/COP

InSitu Obs

MetOc Models

Remote Sensing

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 4: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

ImageMosaic – the basics

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 5: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Terminology Granule/Tile

The individual raster element composing the mosaic

(Granule) Index The collection of metadata records describing

the location, spatial coverage and other attributes of each single granule

Dimensions/Domains The dimensions besides the spatial ones used

to distinguish individual granules

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 6: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Assumptions Granules must share the same Coordinate

Reference System not anymore in GeoServer 2.10 (release Oct 2016)

Granules must share the same ColorModel and SampleModel not anymore in GeoServer 2.8.0, assuming you enable JAI-EXT

Granules can overlap as they please, can have different resolutions

Granules can be in different file formats (faster if the format is uniform)

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 7: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

The Index Always present Drives the collection of granules for

mosaicking Implemented by default using GeoTools Vector

Sources Currently supported/tested sources

PostGIS (JNDI) Oracle (JNDI) it’s been a nightmare because of

naming! Shapefile (no attr indexing, no timestamp) H2 (local embedded db)

Can be customized to support custom granule indexes (e.g. legacy catalog)

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 8: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

The Dimensions Maps to alphanumeric attributes in the index 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

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 9: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Parsing dimensions from file names indexer.properties file

TimeAttribute=ingestionElevationAttribute=elevationSchema=*the_geom:Polygon,location:String,ingestion:java.util.Date,elevation:DoublePropertyCollectors=TimestampFileNameExtractorSPI[timeregex](ingestion),DoubleFileNameExtractorSPI[elevationregex](elevation)

elevationregex.properties fileregex=(?<=_)(\\d{3})(?=_)

elevationregex.properties fileregex=[0-9]{8}T[0-9]{9}Z(\?!.\*[0-9]{8}T[0-9]{9}Z.\*)

NCOM_wattemp_020_20081031T0000000_12.tiff

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 10: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Publishing dimensions

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 11: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

ImageMosaic – the fun stuff

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 12: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Masking Support 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

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 13: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Coverage Views NetCDF/Grib/Mosaic: one reader, many coverages Sometimes 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

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 14: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Filtering with CQL The mosaic index can be filtered upon with CQL More possibilities than just Time and Elevation Just add &CQL_FILTER=… in your request

FOSS4G 2016, Bonn22nd – 26th August 2016

SENSOR = SAR AND SATELLITE=XYZ

Page 15: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Pluggability Lots of extension points and pluggable bits

PropertyCollectors: extract index attributes from granules

CoverageNameCollector: when you have a hash of files from multiple coverages

GranuleHandler: pre-process granules before getting them in the mosaic

GranuleAcceptor: decide if the granule is actually part of the mosaic

SubMosaicProducer: custom way to mosaic granules GranuleCatalog: how you store the index

See more examples at the end of presentation

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 16: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 17: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF format support NetCDF support

Support COARDS/CF* conventions loosely Expose NetCDF internal data as a set of 2D slices Fast 2D (time, elevation) slice extraction

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 18: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF index support files NetCDF Internal Index Speeds up 2D slice extraction H2/PostgreSQL + binary file Index location is configurable via

–DNETCDF_DATA_DIR Data in a non-writable location Granule Index in a DBMS Individual NetCDF Indexes on a separate directory

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 19: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

One or more variables Polyphemus Sample Dataset 1 File Multiple Coverages!

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 20: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF indexing configuration

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 21: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF indexing configuration NetCDF Indexer drive the indexing Automatically created, can be hand edited to expose

some coverages only or parametrize the indexing

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Indexer> <schemas> <schema name="default" > <attributes>the_geom:Polygon,imageindex:Integer,time:java.util.Date, elevation:Double</attributes> </schema> </schemas> <coverages> <coverage> <name>O3</name> <schema ref="default"></schema> </coverage>… </coverages></Indexer>

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 22: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF GridMapping to EPSG codes

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 23: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Assumptions/Limitations Only NetCDF following COARDS/CF convention are

supported NetCDF WCS output is only available for multidimensional

data sources (ImageMosaic and NetCDF) Only WGS84 is supported starting GeoServer 2.8.x also

custom CRS are supported (GridMapping to EPSG properties)

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 24: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

ImageMosaic – NetCDF integration

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 25: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

NetCDF/Mosaic integration ImageMosaic NetCDF integration

Allow the ImageMosaic to handle multiple NetCDF files Expose NetCDF internal structure (times, elevations) Make ImageMosaic handle slices of the NetCDF file as granules

Mosaic

NetCDF 1 NetCDF 2 NetCDF … N

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 26: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

XML based indexer file Definition of Dimensions/Domains Definition of table schema Definition of Coverage Mapping of dimensions and table schema to

Coverages PropertyCollector definition Additional Indexing Parameters:

Path Behaviour Indexing Directories Aux File

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 27: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

XML indexer: domains/dimensions<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<Indexer> <domains> <domain name="time"> <attributes><attribute>time</attribute></attributes> </domain> <domain name="elevation"> <attributes><attribute>elevation</attribute></attributes> </domain> <domain name="fileDate"> <attributes><attribute ref="fileDateCollector">fileDate</attribute></attributes> </domain> <domain name="updated"> <attributes><attribute ref="updatedCollector">updated</attribute></attributes> </domain> </domains>

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 28: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

XML indexer : schemas and coverages

<schemas> <schema name="default" > <attributes>the_geom:Polygon,location:String,imageindex:Integer,time:java.util.Date, elevation:Double, fileDate:java.util.Date,updated:java.util.Date </attributes> </schema> </schemas> <coverages> <coverage> <name>V</name> <schema ref="default"></schema> <domains> <domain ref="time" /> <domain ref="elevation" /> <domain ref="fileDate" /> <domain ref="updated" /> </domains> </coverage> </coverages>

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 29: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

XML indexer : collectors and params

<collectors> <collector name="fileDateCollector"> <value>[0-9]{8}</value> <spi>TimestampFileNameExtractorSPI</spi> <mapped>fileDate</mapped> </collector> <collector name="updatedCollector"> <value>MODIFY_TIME</value> <spi>RuntimeExtractorSPI</spi> <mapped>updated</mapped> </collector> </collectors> <parameters> <parameter name="AbsolutePath" value="true" /> <parameter name="AuxiliaryFile" value="polyphemus-test.xml" /> <parameter name="IndexingDirectories" value="D:/Training_2.4_multidim_Win64/source_data/polyphemus" /> </parameters>

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 30: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Multiple coverages per mosaic

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 31: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

REST configuration of mosaic contents Granule Index CRUD Operations via REST CREATEcurl -u admin:Geos -XPUT -H "Content-type:application/zip" --data-binary @http://localhost:8080/geoserver/rest/workspaces/geosolutions/coveragestores/temperature/file.imagemosaic

READ index schemacurl -v -u admin:Geos -XGET http://localhost:8080/geoserver/rest/workspaces/geosolutions/coveragestores/polyphemus/coverages/NO2/index.xml

READ WFS like with CQL filtering and pagingcurl -v -u admin:Geos -XGET "http://localhost:8080/geoserver/rest/workspaces/geosolutions/coveragestores/polyphemus/coverages/NO2/index/granules.xml?limit=1&filter=time='2013-03-03T00:00:00Z

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 32: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

REST configuration of mosaic contents READ (Retrieve specific granule by ID)curl -v -u admin:geoserver -XGET "http://localhost:8080/geoserver/rest/workspaces/topp/coveragestores/polyphemus-v1/coverages/NO2/index/granules/NO2.2689.xml"

UPDATE (harvest)curl -v -u admin:Geos -XPOST -H "Content-type: text/plain" -d "/polyphemus_20130303.nc" "http://localhost:8080/geoserver/rest/workspaces/geosolutions/coveragestores/polyphemus/external.imagemosaic"

DELETE WFS like with CQL filtering and paging or by IDcurl -v -u admin:geoserver -XDELETE "http://localhost:8080/geoserver/rest/workspaces/topp/coveragestores/polyphemus-v1/coverages/NO2/index/granules.xml?filter=location='polyphemus_20130301.nc'"

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 33: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

GRIB/GRIB2 Format Support Based on same UCAR NetCDF Java libs used

by NetCDF Format Same capabilities of NetCDF Format Same indexing logic Same ImageMosaic support

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 34: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

The services - visualize

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 35: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WMS

TIME, ELEVATION & Custom dimensions

http://localhost:8080/geoserver/geosolutions/wms?...&time=2013-03-1T00:00:00.000Z

&elevation=35.0&DIM_FILEDATE=2013-03-01T00:00:00.000Z&DIM_UPDATED=2013-04-08T08:18:41.597Z

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 36: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Rendering transformations

SLD Based transformations On-the-fly contouring On-the-fly poligonalization Current arrows Wind Barbs

Pluggable: add your own

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 37: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Rendering transformations

windbarbs

currents

contouring

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 38: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WMS-EO

Extending LayerGroup concept

Support same style on both raster 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

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 39: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WMS-EO

Helper UI to build the treeFOSS4G 2016, Bonn

22nd – 26th August 2016

Page 40: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WMS-EO

FOSS4G 2016, Bonn22nd – 26th September 2016

Page 41: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

The services - download

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 42: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WCS 2.0 Basics

Core service KVP binding XML binding

Common extensions CRS Scaling Interpolation Range subsetting GeoTiff GML NetCDF

Add the output format extensions GeoTIFF GML Grid NetCDF

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 43: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WCS 2.0 processing chain

Crop

RangeSubset

Scale & Interpolate

Reproject & Interpolate

Encode

Core

Extension

Extension

Extension

Extension

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 44: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WCS 2.0 DescribeCoverage

4D BBOX

TIME details as extension

ELEVATIONdetails as extension

CUSTOM

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 45: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Download ND NetCDFhttp://localhost:8080/geoserver/wcs?request=GetCoverage&service=WCS&version=2.0.1&coverageId=geosolutions__NO2&Format=application/x-netcdf&subset=http://www.opengis.net/def/axis/OGC/0/Long(5,20)&subset=http://www.opengis.net/def/axis/OGC/0/Lat(40,50)&subset=http://www.opengis.net/def/axis/OGC/0/elevation(300,1250)&subset=http://www.opengis.net/def/axis/OGC/0/time("2013-03-01T10:00:00.000Z","2013-03-01T22:00:00.000Z")

• Can also handle custom dimensions

• Described in DescribeCoverage in a vendor metadata section

FOSS4G 2016, Bonn22nd – 26th August 2016

4D

BBOX

Page 46: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

WCS EO Add support for WCS EO metadata in readers

Associate each file with EO metadata Include such information in

DescribeCoverage/DescribeEODataset

EODataset: multidimensional mosaic or NetCDF fileDescribe the inner structure (granules listing) in DescribeEODataSet

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 47: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Plug your data

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 48: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 1 – Light Integration

FOSS4G 2016, Bonn22nd – 26th August 2016

GeoServer + MapStore + 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

Page 49: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 1 – Light Integration

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 50: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 1 – Light Integration

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 51: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 1 – Light Integration

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 52: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 2 – Deep Integration High Res Imagery SSO with CAS Legacy Ingestion

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 53: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 2 Database of satellite imagery, one satellite 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

FOSS4G 2016, Bonn22nd – 26th August 2016

Mosaic

POSTGIS

Custom store wrapper

Postgis store

Page 54: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

Use Case 3 – Let’s go Deeper! XXX

FOSS4G 2016, Bonn22nd – 26th August 2016

Page 55: Serving earth observation data with GeoServer: addressing real world requirements - FOSS4G 2016

That’s all folks!

[email protected]

FOSS4G 2016, Bonn22nd – 26th August 2016