SlideShare a Scribd company logo
SOSPilot - Prototype
Just van den Broecke 	

Geonovum	

Amersfoort - Oct 27, 2014	

just@justobjects.nl
ABOUT
Independent Open
Source Geospatial
Professional 	

justobjects.nl
Member of the 	

OpenGeoGroep (NL)	

www.opengeogroep.nl
Secretary 

OSGeo.nl
1.  Intro
1.  Intro
Back into 

Environmental 

Chemistry
1.  Intro
1. Intro	

2. Data Transformation (ETL) 	

3. Services	

4. Clients	

5. Demo	

6. Discussion
Agenda
Home: sensors.geonovum.nl	

Doc: sospilot.rtfd.org 	

Code: github.com/Geonovum/sospilot	

TODO: GitHub issue tracker	

Project Links
1.  Intro
Scope
1.  Intro
From: ”Building bridges: experiences and lessons learned from the implementation of INSPIRE and e-reporting of air quality data in Europe" 

by: Alexander Kotsev, Olav Peeters, Paul Smits and Michel Grothe. - Earth Sci Inform DOI 10.1007/s12145-014-0160-8
SOS
WMS
WFS
Data
Prototype Scope
1.  Intro
Clients
Services
Data and Transformations
2.  Data  Transformation  (ETL)
Data and
Transformations"
(ETL)
2.  Data  Transformation  (ETL)
Source: Hourly Measurements
Source: AQ Station Info (EIONET)
2.  Data  Transformation  (ETL)
Multistep ETL
2.  Data  Transformation  (ETL)
Step 1
Step 2
Step 3
2.  Data  Transformation  (ETL)
Multistep ETL -"
Advantages
• backup of source XML data files"
• incrementally build up of history past the last month"
• in case of (design) errors we can always restart anew"
• simpler ETL scripts than “all-in-one” (divide & conquer)"
• migration with changed in 52N SOS DB schema simpler"
• prepared for IPR/INSPIRE ETL "
• OWS server (WMS/WFS evt WCS) can directly use Core AQ DB"
• many possibilities with VIEWs on Core AQ DB"
• aggregations"
• last measured values"
• peak values"
• Voronoi polygons
2.  Data  Transformation  (ETL)
ETL Step 1"
File Harvester
Raw XML Files
“Blobs” + meta
in PostGIS
2.  Data  Transformation  (ETL)
ETL Step 2"
Raw AQ Measurements
“Blobs” + meta
in PostGIS
Records in 	

PostGIS
2.  Data  Transformation  (ETL)
ETL Step 2"
Stations
Edits + GDAL ogr2ogr
Stations CSV	

EIONET
Records in 	

PostGIS
2.  Data  Transformation  (ETL)
ETL Step 3"
SOS Publication
Via SOS-Transaction Protocol
Raw Records	

PostGIS
S	

O	

S	

-	

T 52N SOS	

PostGIS DB
2.  Data  Transformation  (ETL)
ETL Step 3"
SOS-T Templates - InsertSensor
{{!
"request": "InsertSensor",!
"service": "SOS",!
"version": "2.0.0",!
"procedureDescriptionFormat": "http://www.opengis.net/sensorML/1.0.1",!
"procedureDescription": "{procedure-desc.xml}",!
"observableProperty": [!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/benzeen",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/CO",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/NH3",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/NO",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/NO2",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/O3",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/PM10",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/PM25",!
"http://sensors.geonovum.nl/rivm-lml/observableProperty/SO2"!
],!
"observationType": [!
"http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"!
],!
"featureOfInterestType": "http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/
SF_SamplingPoint"!
}}
2.  Data  Transformation  (ETL)
{{!
"request": "InsertObservation",!
"service": "SOS",!
"version": "2.0.0",!
"offering": "http://sensors.geonovum.nl/rivm-lml/offering/{station_id}",!
"observation": {{!
"identifier": {{!
.!
"procedure": "http://sensors.geonovum.nl/rivm-lml/procedure/{station_id}",!
"observedProperty": "http://sensors.geonovum.nl/rivm-lml/observableProperty/{component}",!
"featureOfInterest": {{!
"identifier": {{!
"value": "http://sensors.geonovum.nl/rivm-lml/featureOfInterest/{station_id}",!
"codespace": "http://www.opengis.net/def/nil/OGC/0/unknown"!
}},!
"name": [!
{{!
"value": "{municipality}",!
"codespace": "http://www.opengis.net/def/nil/OGC/0/unknown"!
}}!
],!
"geometry": {{!
"type": "Point",!
"coordinates": [!
{station_lat},!
{station_lon}!
],!
.!
.!
}}!
}},!
"phenomenonTime": "{sample_time}",!
"resultTime": "{sample_time}",!
"result": {{!
"uom": "ug/m3",!
"value": {sample_value}!
}}!
}}!
ETL Step 3"
SOS-T Templates - InsertObservation
2.  Data  Transformation  (ETL)
ETL Tech"
Progress Tracking
Track	

Last Processed	

Record in DB
2.  Data  Transformation  (ETL)
ETL Tech"
Tool: Stetl
• Framework for Streaming ETL"
• Proven for Dutch datasets (Top10NL and BGT)"
• Proven for INSPIRE ETL (BAG to AD, Top10 to TN)"
• Integration with native libs: libXML, libXSLT, GDAL/OGR"
• Declarative programming using config files"
• Call-back programming model"
• Extensibility via own custom modules"
• Free and Open Source (GPL) in Python"
"
More on stetl.org and presentation
2.  Data  Transformation  (ETL)
ETL Tech"
Tool: Stetl
Input Filter Output
gml
Filter
2.  Data  Transformation  (ETL)
[etl]!
chains = input_measurements_dbquery|output_sos_observation_insert!
"
# for reading files from Apache dir listing!
[input_measurements_dbquery]!
class = measurementsdbinput.MeasurementsDbInput!
host = {host}!
database = {database}!
user = {user}!
password = {password}!
schema = {schema}!
table = measurements_stations!
query = SELECT * from measurements_stations WHERE gid > %d ORDER BY gid LIMIT 500!
progress_query = SELECT * from etl_progress WHERE worker = 'measurements2sos'!
progress_update = UPDATE etl_progress SET last_id = %d, last_update = current_timestamp WHERE
worker = 'measurements2sos'!
"
[output_std]!
class = outputs.standardoutput.StandardOutput!
"
# For inserting sensors!
[output_sos_observation_insert]!
class = sosoutput.SOSTOutput!
host = {http_host}!
port = {http_port}!
path = {http_path}!
user = {http_user}!
password = {http_password}!
method = POST!
content_type = application/json;charset=UTF-8!
sos_request = insert-observation!
template_file_ext = json!
template_file_root = sostemplates!
measurements2sos.cfg
ETL Tech"
Stetl Config - Step 3"
SOS-T Publication
2.  Data  Transformation  (ETL)
"
options="database=sensors schema=rivm_lml host=localhost port=80 

user=** password=** http_host=sensors.geonovum.nl 

http_port=80 http_user=** http_password=** 

http_path=/sos/service"!
"
stetl -c measurements2sos.cfg -a "$options"!
ETL Tech"
Stetl Command - Step 3"
SOS-T Publication
3.  Services
Services"
WMS/WFS
• On RAW AQ Data tables"
• Prepare data via Postgres VIEWs"
• Using GeoServer"
• Using WMS-Time"
"
Service URL "
sensors.geonovum.nl/gs/ows



Viewer

sensors.geonovum.nl/heronviewer
CREATE VIEW rivm_lml.measurements_stations AS!
SELECT m.gid, m.station_id, s.municipality, m.component, m.sample_time,
m.sample_value, s.point, m.validated,!
m.file_name, m.insert_time, m.sample_id,!
s.local_id, s.eu_station_code, s.altitude, s.area_classification,!
s.activity_begin, s.activity_end!
FROM rivm_lml.measurements as m!
INNER JOIN rivm_lml.stations as s ON m.station_id =
s.natl_station_code;
Services "
WMS/WFS via VIEWs
3.  Services
Measurements with Station info, a.o. GeoLocation
Services "
WMS/WFS via VIEWs
3.  Services
Measurements with Station info, a.o. GeoLocation
-- per component last-captured measurements!
CREATE VIEW rivm_lml.v_last_measurements_NO2 AS!
SELECT DISTINCT ON (station_id) station_id,!
municipality, sample_time, sample_value, point, validated, gid, sample_id!
FROM rivm_lml.measurements_stations WHERE component = 'NO2' ORDER BY
station_id, gid DESC;!
"
CREATE VIEW rivm_lml.v_last_measurements_O3 AS!
SELECT DISTINCT ON (station_id) station_id,!
municipality, sample_time, sample_value, point, validated, gid, sample_id!
FROM rivm_lml.measurements_stations WHERE component = 'O3' ORDER BY
station_id, gid DESC;!
"
.!
.!
"
-- per component time-series measurements!
CREATE VIEW rivm_lml.v_measurements_NO2 AS!
SELECT station_id,!
municipality, sample_time, sample_value, point, validated, gid, sample_id!
FROM rivm_lml.measurements_stations WHERE component = 'NO2';!
Services "
WMS/WFS via VIEWs
3.  Services
Services "
WMS/WFS via VIEWs
3.  Services
Last Measurements for Ozone
3.  Services
Services"
WMS/WFS
WMS Time
3.  Services
Services"
SOS
• Using 52North SOS"
• Easy setup via Tomcat deploy + Admin GUI"
• Data population via SOS-T"
"
Service URL "
http://sensors.geonovum.nl/sos/service?
3.  Services
Services -SOS
4.  Clients
Clients
• WMS/WFS - “HeronViewer”"
• SensorWebClient - 52North"
• SOS.js - JavaScript - 52 North"
"
Links via "
sensors.geonovum.nl
Clients - WMS/WFS - HeronViewer
4.  Clients
4.  Clients
Clients - SOS - SWClient - 52N
4.  Clients
Clients - SOS - SWClient - 52N
Clients - SOS - SOS.js - 52N
4.  Clients
Automated AQ
Reporting

Geonovum PoC using Web services
with Stetl
AQ Reporting - Architecture
4.  Clients
AQ
ETL
EU
Database Database
Web Services
JSON Docs
Dataflows
B,C,D,E,F
WFS SOS Custom
AQ Reporting - ETL
4.  Clients
Stetl
Dataflows
B,C,D,E,F
XML Docs
XML Template
Docs (Jinja2)
Custom
Python
Stetl
ETL Config
Web Services
WFS SOS Custom
# Example dataflow-D (Assessment Methods metadata) report generation using Stetl with Jinja2 templating filter.
# The input data comes directly from a WFS providing station info.!
# The template files and global variables (globals.json) are under templates folder.!
#!
# All rendered output under output/!
#!
[etl]!
chains = input_json|dataflow-D_template | output_dataflow-D_file!
"
[input_json]!
class = inputs.fileinput.JsonFileInput!
file_path = http://sensors.geonovum.nl/gs/ows?service=WFS&request=GetFeature

&typeName=sensors:active_stations&outputformat=JSON&srsName=EPSG:4326!
"
# Advanced gml templating with globals for more or less static content!
# in rivm-globals.json like id-prefixes and contact info etc!
[dataflow-D_template]!
class = filters.templatingfilter.Jinja2TemplatingFilter!
template_file = templates/dataflow-D.jinja2!
template_globals_path = input/globals-rivm.json!
"
[output_dataflow-D_file]!
class = outputs.fileoutput.FileOutput!
file_path = output/dataflow-D.xml!
Stetl Config - Dataflow D
4.  Clients
ETL Chain
WFS Input
XML

Template
Output	

File
{"type": "FeatureCollection", "totalFeatures": 109, "features": [!
{!
"type": "Feature",!
"id": "active_stations.fid-7d46fd2a_14864b87f63_17c8",!
"geometry": {!
"type": "Point",!
"coordinates": [3.91694736, 51.63555908]!
},!
"geometry_name": "point",!
"properties": {!
"gid": 19,!
"local_id": "STA-NL00301",!
"natl_station_code": "301",!
"eu_station_code": "NL00301",!
"name": "Zierikzee-Lange Slikweg",!
"municipality": "Schouwen-Duiveland",!
"altitude": -1,!
"altitude_unit": "m",!
"area_classification": "http://dd.eionet.europa.eu/vocabulary/aq/areaclassification/rural",!
"activity_begin": "1976-01-01T23:00:00Z",!
"activity_end": null,!
"version": "",!
"zone_name": "Zuid",!
"lon": "3.91694736",!
"lat": "51.63555908",!
"zone_code": "NL00300",!
"pollutants": "NO,NO2,O3"!
}!
},!
{!
"type": "Feature",!
"id": "active_stations.fid-7d46fd2a_14864b87f63_17c9",!
"geometry": {!
"type": "Point",!
"coordinates": [5.85361385, 51.54111099]!
Stetl Config - Dataflow D - WFS Data
4.  Clients
<!-- START STATIONS -->!
{% for feature in features %}!
<gml:featureMember>!
<aqd:AQD_Station gml:id="{{ feature.properties.local_id }}">!
<ef:inspireId>!
{{ macros_inspire.render_inspire_id(globs.namespace, feature.properties.local_id) }}!
</ef:inspireId>!
<ef:name>{{ feature.properties.name }}</ef:name>!
<ef:mediaMonitored xlink:href="http://inspire.ec.europa.eu/codeList/MediaValue/air"/>!
<ef:geometry>!
{% set gml_id = 'STA_G-%s' % feature.properties.local_id %}!
{{ feature.geometry | geojson2gml(source_crs=crs, target_crs=4258, gml_id=gml_id,
ml_format='GML3', gml_longsrs='YES') }}!
</ef:geometry>!
<ef:measurementRegime 

xlink:href="http://inspire.ec.europa.eu/codeList/MeasurementRegimeValue/continuousDataCollection"/>!
<ef:mobile>false</ef:mobile>!
<ef:operationalActivityPeriod>!
<ef:OperationalActivityPeriod gml:id="STA_P-{{ feature.properties.local_id }}">!
<ef:activityTime>!
<gml:TimePeriod gml:id="STA_T-{{ feature.properties.local_id }}">!
<gml:beginPosition>{{ feature.properties.activity_begin }}</gml:beginPosition>!
<gml:endPosition indeterminatePosition="unknown"/>!
</gml:TimePeriod>!
</ef:activityTime>!
</ef:OperationalActivityPeriod>!
</ef:operationalActivityPeriod>!
<ef:belongsTo xlink:href="{{ globs.namespace }}/NET-NL010A"/>!
<aqd:natlStationCode>{{ feature.properties.natl_station_code }}</aqd:natlStationCode>!
<aqd:municipality>{{ feature.properties.municipality }}</aqd:municipality>!
<aqd:EUStationCode>{{ feature.properties.local_id }}</aqd:EUStationCode>!
<aqd:meteoParams xlink:href="{{ globs.dataflow_D.meteo_params }}"/>!
<aqd:areaClassification xlink:href="{{ feature.properties.area_classification }}"/>!
<aqd:altitude uom="{{ feature.properties.altitude_unit }}">{{ feature.properties.altitude }}</
qd:altitude>!
Stetl Config - Dataflow D - Template
4.  Clients
AQ Reporting Status
• Dataflows B,C,D more or less done	

• Main issue is lack of source data	

• See GitHub for code:

https://github.com/Geonovum/sospilot/tree/
master/src/aq-report 	

• Very quick way to develop, about one day per
dataflow
AQ Reporting
Recommendations
• Store all relevant data in database(s) - PostgreSQL! 	

• Expose data via web services:WFS, SOS, Custom	

• Let these web services provide JSON (i.s.o. XML)	

• Keep the SOS basic/let ETL do the AQ reporting	

• Use template substitution as ETL mechanism
Weather Station	

Geonovum Weather station -
datastream integrated 

into WMS/WFS and SOS
Architecture
WMS WFS SOS
SSH/PostgreSQL
Architecture
Weather
Communities
Wunderground etc
Davis Weather
Station
ETL
52N
SOS Server
GeoServer
SOS WMS/WFS
Weather
Communities
Wunderground etc
Reports
Web API
Architecture
Archive
Recs
SQLite
Stetl
Sync
weewx
Weather
Data
PostGIS
52N
SOS Data
PostGIS
Stetl
SOS
USB
SOS-T
52N
SOS Server
GeoServer
SOS WMS-T/WFS
Weather
Communities
Wunderground etc
Apache
HTTP Server
HTTP
APIs
Davis Weather
Station
rsync
Weather
Reports
HTML
Ubuntu Linux VPS
SSHTun SSH
Result - Reporting
Result - Publish to Weather Community
Result - Publish to Weather Community
Result - WMS-Time/WFS
Result - SOS Integration
Demo
5.Demos
Discussion
6.  Discussion
Open Items/TODO
6.  Discussion
• Source data"
• http://www.lml.rivm.nl/xml or"
• http://www.lml.rivm.nl/sos "
• Stations info "
• name attribute Eionet only municipality"
• Standardize/Harmonize SOS Model Elements"
• pollutant naming, codelists"
• Time format (timezone) from source to SOS"
• INSPIRE-related"
• 2 Client-frameworks: SOS.js and SWC"
• (Historical) weather data in WMS-T and SOS"
"
Tracked on https://github.com/Geonovum/sospilot/issues

More Related Content

Similar to SensorWeb SOS Pilot RIVM/Geonovum - Status

FIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE Training: IoT and Legacy
FIWARE Training: IoT and Legacy
FIWARE
 
The Schema Editor of OpenIoT for Semantic Sensor Networks
The Schema Editor of OpenIoT for Semantic Sensor NetworksThe Schema Editor of OpenIoT for Semantic Sensor Networks
The Schema Editor of OpenIoT for Semantic Sensor Networks
Jean-Paul Calbimonte
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
Rafał Kuć
 
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & ElasticsearchFrom Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
Sematext Group, Inc.
 
Context Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basicsContext Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basics
Fernando Lopez Aguilar
 
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
FIWARE
 
FIWARE Internet of Things
FIWARE Internet of ThingsFIWARE Internet of Things
FIWARE Internet of Things
Miguel González
 
FIWARE Internet of Things
FIWARE Internet of ThingsFIWARE Internet of Things
FIWARE Internet of Things
Miguel García González
 
Monitoring a Kubernetes-backed microservice architecture with Prometheus
Monitoring a Kubernetes-backed microservice architecture with PrometheusMonitoring a Kubernetes-backed microservice architecture with Prometheus
Monitoring a Kubernetes-backed microservice architecture with Prometheus
Fabian Reinartz
 
FIWARE IoT Proposal & Community
FIWARE IoT Proposal & CommunityFIWARE IoT Proposal & Community
FIWARE IoT Proposal & Community
FIWARE
 
Open Sensor Networks
Open Sensor NetworksOpen Sensor Networks
Open Sensor Networks
Just van den Broecke
 
Programming IoT Gateways in JavaScript with macchina.io
Programming IoT Gateways in JavaScript with macchina.ioProgramming IoT Gateways in JavaScript with macchina.io
Programming IoT Gateways in JavaScript with macchina.io
Günter Obiltschnig
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT Meetup
 
Creating a Java Internet of Things Gateway
Creating a Java Internet of Things GatewayCreating a Java Internet of Things Gateway
Creating a Java Internet of Things Gateway
Eurotech
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
Dongmin Yu
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
Jakub Hajek
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
PROIDEA
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
Adam Lu
 
XGSN: An Open-source Semantic Sensing Middleware for the Web of Things
XGSN: An Open-source Semantic Sensing Middleware for the Web of ThingsXGSN: An Open-source Semantic Sensing Middleware for the Web of Things
XGSN: An Open-source Semantic Sensing Middleware for the Web of Things
Jean-Paul Calbimonte
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
Sreenivas Makam
 

Similar to SensorWeb SOS Pilot RIVM/Geonovum - Status (20)

FIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE Training: IoT and Legacy
FIWARE Training: IoT and Legacy
 
The Schema Editor of OpenIoT for Semantic Sensor Networks
The Schema Editor of OpenIoT for Semantic Sensor NetworksThe Schema Editor of OpenIoT for Semantic Sensor Networks
The Schema Editor of OpenIoT for Semantic Sensor Networks
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
 
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & ElasticsearchFrom Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
 
Context Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basicsContext Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basics
 
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
 
FIWARE Internet of Things
FIWARE Internet of ThingsFIWARE Internet of Things
FIWARE Internet of Things
 
FIWARE Internet of Things
FIWARE Internet of ThingsFIWARE Internet of Things
FIWARE Internet of Things
 
Monitoring a Kubernetes-backed microservice architecture with Prometheus
Monitoring a Kubernetes-backed microservice architecture with PrometheusMonitoring a Kubernetes-backed microservice architecture with Prometheus
Monitoring a Kubernetes-backed microservice architecture with Prometheus
 
FIWARE IoT Proposal & Community
FIWARE IoT Proposal & CommunityFIWARE IoT Proposal & Community
FIWARE IoT Proposal & Community
 
Open Sensor Networks
Open Sensor NetworksOpen Sensor Networks
Open Sensor Networks
 
Programming IoT Gateways in JavaScript with macchina.io
Programming IoT Gateways in JavaScript with macchina.ioProgramming IoT Gateways in JavaScript with macchina.io
Programming IoT Gateways in JavaScript with macchina.io
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
 
Creating a Java Internet of Things Gateway
Creating a Java Internet of Things GatewayCreating a Java Internet of Things Gateway
Creating a Java Internet of Things Gateway
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
XGSN: An Open-source Semantic Sensing Middleware for the Web of Things
XGSN: An Open-source Semantic Sensing Middleware for the Web of ThingsXGSN: An Open-source Semantic Sensing Middleware for the Web of Things
XGSN: An Open-source Semantic Sensing Middleware for the Web of Things
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
 

More from Just van den Broecke

Just's Career Highlights - Version 2
Just's Career Highlights - Version 2Just's Career Highlights - Version 2
Just's Career Highlights - Version 2
Just van den Broecke
 
Just's Career Highlights - Version 1
Just's Career Highlights - Version 1Just's Career Highlights - Version 1
Just's Career Highlights - Version 1
Just van den Broecke
 
Open Sensor Networks with LoRa TTN and SensorThings API
Open Sensor Networks with LoRa TTN and SensorThings APIOpen Sensor Networks with LoRa TTN and SensorThings API
Open Sensor Networks with LoRa TTN and SensorThings API
Just van den Broecke
 
Sensor SDI in PDOK with Smart Emission Platform
Sensor SDI in PDOK with Smart Emission PlatformSensor SDI in PDOK with Smart Emission Platform
Sensor SDI in PDOK with Smart Emission Platform
Just van den Broecke
 
osgeonl-opening-foss4gnl-2018
osgeonl-opening-foss4gnl-2018osgeonl-opening-foss4gnl-2018
osgeonl-opening-foss4gnl-2018
Just van den Broecke
 
Stetl-engine-nlextract-smartem
Stetl-engine-nlextract-smartemStetl-engine-nlextract-smartem
Stetl-engine-nlextract-smartem
Just van den Broecke
 
OSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-OpeningOSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-Opening
Just van den Broecke
 
Opening OSGeo.nl Day 2017
Opening OSGeo.nl Day 2017Opening OSGeo.nl Day 2017
Opening OSGeo.nl Day 2017
Just van den Broecke
 
Smart Emission Data Platform
Smart Emission Data PlatformSmart Emission Data Platform
Smart Emission Data Platform
Just van den Broecke
 
De Levenscyclus van Open Geodata met Open Source Tools
De Levenscyclus van Open Geodata met Open Source ToolsDe Levenscyclus van Open Geodata met Open Source Tools
De Levenscyclus van Open Geodata met Open Source Tools
Just van den Broecke
 
NLExtract Project - OGT Award Pitch GeoBuzz 2016
NLExtract Project - OGT Award Pitch GeoBuzz 2016NLExtract Project - OGT Award Pitch GeoBuzz 2016
NLExtract Project - OGT Award Pitch GeoBuzz 2016
Just van den Broecke
 
Smart Emission - Citizens measuring Air Quality - Overview
Smart Emission - Citizens measuring Air Quality - OverviewSmart Emission - Citizens measuring Air Quality - Overview
Smart Emission - Citizens measuring Air Quality - Overview
Just van den Broecke
 
Geospatial ETL with Stetl - GeoPython 2016
Geospatial ETL with Stetl - GeoPython 2016Geospatial ETL with Stetl - GeoPython 2016
Geospatial ETL with Stetl - GeoPython 2016
Just van den Broecke
 
Smart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - StandardsSmart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - Standards
Just van den Broecke
 
NLExtract voor BAG - overview
NLExtract voor BAG - overviewNLExtract voor BAG - overview
NLExtract voor BAG - overview
Just van den Broecke
 
3D Breakthrough Meeting - 3D Standards progress
3D Breakthrough Meeting - 3D Standards progress3D Breakthrough Meeting - 3D Standards progress
3D Breakthrough Meeting - 3D Standards progress
Just van den Broecke
 
Wandelen met GPS en De Evolutie van Navigatie
Wandelen met GPS en De Evolutie van NavigatieWandelen met GPS en De Evolutie van Navigatie
Wandelen met GPS en De Evolutie van Navigatie
Just van den Broecke
 
OSGeo.nl - Year 2014 Highlights
OSGeo.nl - Year 2014 HighlightsOSGeo.nl - Year 2014 Highlights
OSGeo.nl - Year 2014 Highlights
Just van den Broecke
 
Nederland Ontsloten! OSGeo.nl Dag 2014
Nederland Ontsloten! OSGeo.nl Dag 2014Nederland Ontsloten! OSGeo.nl Dag 2014
Nederland Ontsloten! OSGeo.nl Dag 2014
Just van den Broecke
 
Big Data - Introduction and Research Topics - for Dutch Kadaster
Big Data - Introduction and Research Topics - for Dutch KadasterBig Data - Introduction and Research Topics - for Dutch Kadaster
Big Data - Introduction and Research Topics - for Dutch Kadaster
Just van den Broecke
 

More from Just van den Broecke (20)

Just's Career Highlights - Version 2
Just's Career Highlights - Version 2Just's Career Highlights - Version 2
Just's Career Highlights - Version 2
 
Just's Career Highlights - Version 1
Just's Career Highlights - Version 1Just's Career Highlights - Version 1
Just's Career Highlights - Version 1
 
Open Sensor Networks with LoRa TTN and SensorThings API
Open Sensor Networks with LoRa TTN and SensorThings APIOpen Sensor Networks with LoRa TTN and SensorThings API
Open Sensor Networks with LoRa TTN and SensorThings API
 
Sensor SDI in PDOK with Smart Emission Platform
Sensor SDI in PDOK with Smart Emission PlatformSensor SDI in PDOK with Smart Emission Platform
Sensor SDI in PDOK with Smart Emission Platform
 
osgeonl-opening-foss4gnl-2018
osgeonl-opening-foss4gnl-2018osgeonl-opening-foss4gnl-2018
osgeonl-opening-foss4gnl-2018
 
Stetl-engine-nlextract-smartem
Stetl-engine-nlextract-smartemStetl-engine-nlextract-smartem
Stetl-engine-nlextract-smartem
 
OSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-OpeningOSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-Opening
 
Opening OSGeo.nl Day 2017
Opening OSGeo.nl Day 2017Opening OSGeo.nl Day 2017
Opening OSGeo.nl Day 2017
 
Smart Emission Data Platform
Smart Emission Data PlatformSmart Emission Data Platform
Smart Emission Data Platform
 
De Levenscyclus van Open Geodata met Open Source Tools
De Levenscyclus van Open Geodata met Open Source ToolsDe Levenscyclus van Open Geodata met Open Source Tools
De Levenscyclus van Open Geodata met Open Source Tools
 
NLExtract Project - OGT Award Pitch GeoBuzz 2016
NLExtract Project - OGT Award Pitch GeoBuzz 2016NLExtract Project - OGT Award Pitch GeoBuzz 2016
NLExtract Project - OGT Award Pitch GeoBuzz 2016
 
Smart Emission - Citizens measuring Air Quality - Overview
Smart Emission - Citizens measuring Air Quality - OverviewSmart Emission - Citizens measuring Air Quality - Overview
Smart Emission - Citizens measuring Air Quality - Overview
 
Geospatial ETL with Stetl - GeoPython 2016
Geospatial ETL with Stetl - GeoPython 2016Geospatial ETL with Stetl - GeoPython 2016
Geospatial ETL with Stetl - GeoPython 2016
 
Smart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - StandardsSmart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - Standards
 
NLExtract voor BAG - overview
NLExtract voor BAG - overviewNLExtract voor BAG - overview
NLExtract voor BAG - overview
 
3D Breakthrough Meeting - 3D Standards progress
3D Breakthrough Meeting - 3D Standards progress3D Breakthrough Meeting - 3D Standards progress
3D Breakthrough Meeting - 3D Standards progress
 
Wandelen met GPS en De Evolutie van Navigatie
Wandelen met GPS en De Evolutie van NavigatieWandelen met GPS en De Evolutie van Navigatie
Wandelen met GPS en De Evolutie van Navigatie
 
OSGeo.nl - Year 2014 Highlights
OSGeo.nl - Year 2014 HighlightsOSGeo.nl - Year 2014 Highlights
OSGeo.nl - Year 2014 Highlights
 
Nederland Ontsloten! OSGeo.nl Dag 2014
Nederland Ontsloten! OSGeo.nl Dag 2014Nederland Ontsloten! OSGeo.nl Dag 2014
Nederland Ontsloten! OSGeo.nl Dag 2014
 
Big Data - Introduction and Research Topics - for Dutch Kadaster
Big Data - Introduction and Research Topics - for Dutch KadasterBig Data - Introduction and Research Topics - for Dutch Kadaster
Big Data - Introduction and Research Topics - for Dutch Kadaster
 

Recently uploaded

All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
Alina Yurenko
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
gapen1
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
XfilesPro
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
safelyiotech
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 

Recently uploaded (20)

All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 

SensorWeb SOS Pilot RIVM/Geonovum - Status

  • 1. SOSPilot - Prototype Just van den Broecke Geonovum Amersfoort - Oct 27, 2014 just@justobjects.nl
  • 2. ABOUT Independent Open Source Geospatial Professional justobjects.nl Member of the OpenGeoGroep (NL) www.opengeogroep.nl Secretary 
 OSGeo.nl 1.  Intro
  • 4. Back into 
 Environmental 
 Chemistry 1.  Intro
  • 5. 1. Intro 2. Data Transformation (ETL) 3. Services 4. Clients 5. Demo 6. Discussion Agenda
  • 6. Home: sensors.geonovum.nl Doc: sospilot.rtfd.org Code: github.com/Geonovum/sospilot TODO: GitHub issue tracker Project Links 1.  Intro
  • 7. Scope 1.  Intro From: ”Building bridges: experiences and lessons learned from the implementation of INSPIRE and e-reporting of air quality data in Europe" 
 by: Alexander Kotsev, Olav Peeters, Paul Smits and Michel Grothe. - Earth Sci Inform DOI 10.1007/s12145-014-0160-8 SOS WMS WFS Data
  • 9. 2.  Data  Transformation  (ETL) Data and Transformations" (ETL)
  • 10. 2.  Data  Transformation  (ETL) Source: Hourly Measurements
  • 11. Source: AQ Station Info (EIONET)
  • 12. 2.  Data  Transformation  (ETL) Multistep ETL
  • 13. 2.  Data  Transformation  (ETL) Step 1 Step 2 Step 3
  • 14. 2.  Data  Transformation  (ETL) Multistep ETL -" Advantages • backup of source XML data files" • incrementally build up of history past the last month" • in case of (design) errors we can always restart anew" • simpler ETL scripts than “all-in-one” (divide & conquer)" • migration with changed in 52N SOS DB schema simpler" • prepared for IPR/INSPIRE ETL " • OWS server (WMS/WFS evt WCS) can directly use Core AQ DB" • many possibilities with VIEWs on Core AQ DB" • aggregations" • last measured values" • peak values" • Voronoi polygons
  • 15. 2.  Data  Transformation  (ETL) ETL Step 1" File Harvester Raw XML Files “Blobs” + meta in PostGIS
  • 16. 2.  Data  Transformation  (ETL) ETL Step 2" Raw AQ Measurements “Blobs” + meta in PostGIS Records in PostGIS
  • 17. 2.  Data  Transformation  (ETL) ETL Step 2" Stations Edits + GDAL ogr2ogr Stations CSV EIONET Records in PostGIS
  • 18. 2.  Data  Transformation  (ETL) ETL Step 3" SOS Publication Via SOS-Transaction Protocol Raw Records PostGIS S O S - T 52N SOS PostGIS DB
  • 19. 2.  Data  Transformation  (ETL) ETL Step 3" SOS-T Templates - InsertSensor {{! "request": "InsertSensor",! "service": "SOS",! "version": "2.0.0",! "procedureDescriptionFormat": "http://www.opengis.net/sensorML/1.0.1",! "procedureDescription": "{procedure-desc.xml}",! "observableProperty": [! "http://sensors.geonovum.nl/rivm-lml/observableProperty/benzeen",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/CO",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/NH3",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/NO",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/NO2",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/O3",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/PM10",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/PM25",! "http://sensors.geonovum.nl/rivm-lml/observableProperty/SO2"! ],! "observationType": [! "http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"! ],! "featureOfInterestType": "http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/ SF_SamplingPoint"! }}
  • 20. 2.  Data  Transformation  (ETL) {{! "request": "InsertObservation",! "service": "SOS",! "version": "2.0.0",! "offering": "http://sensors.geonovum.nl/rivm-lml/offering/{station_id}",! "observation": {{! "identifier": {{! .! "procedure": "http://sensors.geonovum.nl/rivm-lml/procedure/{station_id}",! "observedProperty": "http://sensors.geonovum.nl/rivm-lml/observableProperty/{component}",! "featureOfInterest": {{! "identifier": {{! "value": "http://sensors.geonovum.nl/rivm-lml/featureOfInterest/{station_id}",! "codespace": "http://www.opengis.net/def/nil/OGC/0/unknown"! }},! "name": [! {{! "value": "{municipality}",! "codespace": "http://www.opengis.net/def/nil/OGC/0/unknown"! }}! ],! "geometry": {{! "type": "Point",! "coordinates": [! {station_lat},! {station_lon}! ],! .! .! }}! }},! "phenomenonTime": "{sample_time}",! "resultTime": "{sample_time}",! "result": {{! "uom": "ug/m3",! "value": {sample_value}! }}! }}! ETL Step 3" SOS-T Templates - InsertObservation
  • 21. 2.  Data  Transformation  (ETL) ETL Tech" Progress Tracking Track Last Processed Record in DB
  • 22. 2.  Data  Transformation  (ETL) ETL Tech" Tool: Stetl • Framework for Streaming ETL" • Proven for Dutch datasets (Top10NL and BGT)" • Proven for INSPIRE ETL (BAG to AD, Top10 to TN)" • Integration with native libs: libXML, libXSLT, GDAL/OGR" • Declarative programming using config files" • Call-back programming model" • Extensibility via own custom modules" • Free and Open Source (GPL) in Python" " More on stetl.org and presentation
  • 23. 2.  Data  Transformation  (ETL) ETL Tech" Tool: Stetl Input Filter Output gml Filter
  • 24. 2.  Data  Transformation  (ETL) [etl]! chains = input_measurements_dbquery|output_sos_observation_insert! " # for reading files from Apache dir listing! [input_measurements_dbquery]! class = measurementsdbinput.MeasurementsDbInput! host = {host}! database = {database}! user = {user}! password = {password}! schema = {schema}! table = measurements_stations! query = SELECT * from measurements_stations WHERE gid > %d ORDER BY gid LIMIT 500! progress_query = SELECT * from etl_progress WHERE worker = 'measurements2sos'! progress_update = UPDATE etl_progress SET last_id = %d, last_update = current_timestamp WHERE worker = 'measurements2sos'! " [output_std]! class = outputs.standardoutput.StandardOutput! " # For inserting sensors! [output_sos_observation_insert]! class = sosoutput.SOSTOutput! host = {http_host}! port = {http_port}! path = {http_path}! user = {http_user}! password = {http_password}! method = POST! content_type = application/json;charset=UTF-8! sos_request = insert-observation! template_file_ext = json! template_file_root = sostemplates! measurements2sos.cfg ETL Tech" Stetl Config - Step 3" SOS-T Publication
  • 25. 2.  Data  Transformation  (ETL) " options="database=sensors schema=rivm_lml host=localhost port=80 
 user=** password=** http_host=sensors.geonovum.nl 
 http_port=80 http_user=** http_password=** 
 http_path=/sos/service"! " stetl -c measurements2sos.cfg -a "$options"! ETL Tech" Stetl Command - Step 3" SOS-T Publication
  • 26. 3.  Services Services" WMS/WFS • On RAW AQ Data tables" • Prepare data via Postgres VIEWs" • Using GeoServer" • Using WMS-Time" " Service URL " sensors.geonovum.nl/gs/ows
 
 Viewer
 sensors.geonovum.nl/heronviewer
  • 27. CREATE VIEW rivm_lml.measurements_stations AS! SELECT m.gid, m.station_id, s.municipality, m.component, m.sample_time, m.sample_value, s.point, m.validated,! m.file_name, m.insert_time, m.sample_id,! s.local_id, s.eu_station_code, s.altitude, s.area_classification,! s.activity_begin, s.activity_end! FROM rivm_lml.measurements as m! INNER JOIN rivm_lml.stations as s ON m.station_id = s.natl_station_code; Services " WMS/WFS via VIEWs 3.  Services Measurements with Station info, a.o. GeoLocation
  • 28. Services " WMS/WFS via VIEWs 3.  Services Measurements with Station info, a.o. GeoLocation
  • 29. -- per component last-captured measurements! CREATE VIEW rivm_lml.v_last_measurements_NO2 AS! SELECT DISTINCT ON (station_id) station_id,! municipality, sample_time, sample_value, point, validated, gid, sample_id! FROM rivm_lml.measurements_stations WHERE component = 'NO2' ORDER BY station_id, gid DESC;! " CREATE VIEW rivm_lml.v_last_measurements_O3 AS! SELECT DISTINCT ON (station_id) station_id,! municipality, sample_time, sample_value, point, validated, gid, sample_id! FROM rivm_lml.measurements_stations WHERE component = 'O3' ORDER BY station_id, gid DESC;! " .! .! " -- per component time-series measurements! CREATE VIEW rivm_lml.v_measurements_NO2 AS! SELECT station_id,! municipality, sample_time, sample_value, point, validated, gid, sample_id! FROM rivm_lml.measurements_stations WHERE component = 'NO2';! Services " WMS/WFS via VIEWs 3.  Services
  • 30. Services " WMS/WFS via VIEWs 3.  Services Last Measurements for Ozone
  • 32. 3.  Services Services" SOS • Using 52North SOS" • Easy setup via Tomcat deploy + Admin GUI" • Data population via SOS-T" " Service URL " http://sensors.geonovum.nl/sos/service?
  • 34. 4.  Clients Clients • WMS/WFS - “HeronViewer”" • SensorWebClient - 52North" • SOS.js - JavaScript - 52 North" " Links via " sensors.geonovum.nl
  • 35. Clients - WMS/WFS - HeronViewer 4.  Clients
  • 36. 4.  Clients Clients - SOS - SWClient - 52N
  • 37. 4.  Clients Clients - SOS - SWClient - 52N
  • 38. Clients - SOS - SOS.js - 52N 4.  Clients
  • 39. Automated AQ Reporting
 Geonovum PoC using Web services with Stetl
  • 40. AQ Reporting - Architecture 4.  Clients AQ ETL EU Database Database Web Services JSON Docs Dataflows B,C,D,E,F WFS SOS Custom
  • 41. AQ Reporting - ETL 4.  Clients Stetl Dataflows B,C,D,E,F XML Docs XML Template Docs (Jinja2) Custom Python Stetl ETL Config Web Services WFS SOS Custom
  • 42. # Example dataflow-D (Assessment Methods metadata) report generation using Stetl with Jinja2 templating filter. # The input data comes directly from a WFS providing station info.! # The template files and global variables (globals.json) are under templates folder.! #! # All rendered output under output/! #! [etl]! chains = input_json|dataflow-D_template | output_dataflow-D_file! " [input_json]! class = inputs.fileinput.JsonFileInput! file_path = http://sensors.geonovum.nl/gs/ows?service=WFS&request=GetFeature
 &typeName=sensors:active_stations&outputformat=JSON&srsName=EPSG:4326! " # Advanced gml templating with globals for more or less static content! # in rivm-globals.json like id-prefixes and contact info etc! [dataflow-D_template]! class = filters.templatingfilter.Jinja2TemplatingFilter! template_file = templates/dataflow-D.jinja2! template_globals_path = input/globals-rivm.json! " [output_dataflow-D_file]! class = outputs.fileoutput.FileOutput! file_path = output/dataflow-D.xml! Stetl Config - Dataflow D 4.  Clients ETL Chain WFS Input XML
 Template Output File
  • 43. {"type": "FeatureCollection", "totalFeatures": 109, "features": [! {! "type": "Feature",! "id": "active_stations.fid-7d46fd2a_14864b87f63_17c8",! "geometry": {! "type": "Point",! "coordinates": [3.91694736, 51.63555908]! },! "geometry_name": "point",! "properties": {! "gid": 19,! "local_id": "STA-NL00301",! "natl_station_code": "301",! "eu_station_code": "NL00301",! "name": "Zierikzee-Lange Slikweg",! "municipality": "Schouwen-Duiveland",! "altitude": -1,! "altitude_unit": "m",! "area_classification": "http://dd.eionet.europa.eu/vocabulary/aq/areaclassification/rural",! "activity_begin": "1976-01-01T23:00:00Z",! "activity_end": null,! "version": "",! "zone_name": "Zuid",! "lon": "3.91694736",! "lat": "51.63555908",! "zone_code": "NL00300",! "pollutants": "NO,NO2,O3"! }! },! {! "type": "Feature",! "id": "active_stations.fid-7d46fd2a_14864b87f63_17c9",! "geometry": {! "type": "Point",! "coordinates": [5.85361385, 51.54111099]! Stetl Config - Dataflow D - WFS Data 4.  Clients
  • 44. <!-- START STATIONS -->! {% for feature in features %}! <gml:featureMember>! <aqd:AQD_Station gml:id="{{ feature.properties.local_id }}">! <ef:inspireId>! {{ macros_inspire.render_inspire_id(globs.namespace, feature.properties.local_id) }}! </ef:inspireId>! <ef:name>{{ feature.properties.name }}</ef:name>! <ef:mediaMonitored xlink:href="http://inspire.ec.europa.eu/codeList/MediaValue/air"/>! <ef:geometry>! {% set gml_id = 'STA_G-%s' % feature.properties.local_id %}! {{ feature.geometry | geojson2gml(source_crs=crs, target_crs=4258, gml_id=gml_id, ml_format='GML3', gml_longsrs='YES') }}! </ef:geometry>! <ef:measurementRegime 
 xlink:href="http://inspire.ec.europa.eu/codeList/MeasurementRegimeValue/continuousDataCollection"/>! <ef:mobile>false</ef:mobile>! <ef:operationalActivityPeriod>! <ef:OperationalActivityPeriod gml:id="STA_P-{{ feature.properties.local_id }}">! <ef:activityTime>! <gml:TimePeriod gml:id="STA_T-{{ feature.properties.local_id }}">! <gml:beginPosition>{{ feature.properties.activity_begin }}</gml:beginPosition>! <gml:endPosition indeterminatePosition="unknown"/>! </gml:TimePeriod>! </ef:activityTime>! </ef:OperationalActivityPeriod>! </ef:operationalActivityPeriod>! <ef:belongsTo xlink:href="{{ globs.namespace }}/NET-NL010A"/>! <aqd:natlStationCode>{{ feature.properties.natl_station_code }}</aqd:natlStationCode>! <aqd:municipality>{{ feature.properties.municipality }}</aqd:municipality>! <aqd:EUStationCode>{{ feature.properties.local_id }}</aqd:EUStationCode>! <aqd:meteoParams xlink:href="{{ globs.dataflow_D.meteo_params }}"/>! <aqd:areaClassification xlink:href="{{ feature.properties.area_classification }}"/>! <aqd:altitude uom="{{ feature.properties.altitude_unit }}">{{ feature.properties.altitude }}</ qd:altitude>! Stetl Config - Dataflow D - Template 4.  Clients
  • 45. AQ Reporting Status • Dataflows B,C,D more or less done • Main issue is lack of source data • See GitHub for code:
 https://github.com/Geonovum/sospilot/tree/ master/src/aq-report • Very quick way to develop, about one day per dataflow
  • 46. AQ Reporting Recommendations • Store all relevant data in database(s) - PostgreSQL! • Expose data via web services:WFS, SOS, Custom • Let these web services provide JSON (i.s.o. XML) • Keep the SOS basic/let ETL do the AQ reporting • Use template substitution as ETL mechanism
  • 47. Weather Station Geonovum Weather station - datastream integrated 
 into WMS/WFS and SOS
  • 49. Architecture Weather Communities Wunderground etc Davis Weather Station ETL 52N SOS Server GeoServer SOS WMS/WFS Weather Communities Wunderground etc Reports Web API
  • 50. Architecture Archive Recs SQLite Stetl Sync weewx Weather Data PostGIS 52N SOS Data PostGIS Stetl SOS USB SOS-T 52N SOS Server GeoServer SOS WMS-T/WFS Weather Communities Wunderground etc Apache HTTP Server HTTP APIs Davis Weather Station rsync Weather Reports HTML Ubuntu Linux VPS SSHTun SSH
  • 52. Result - Publish to Weather Community
  • 53. Result - Publish to Weather Community
  • 55. Result - SOS Integration
  • 58. Open Items/TODO 6.  Discussion • Source data" • http://www.lml.rivm.nl/xml or" • http://www.lml.rivm.nl/sos " • Stations info " • name attribute Eionet only municipality" • Standardize/Harmonize SOS Model Elements" • pollutant naming, codelists" • Time format (timezone) from source to SOS" • INSPIRE-related" • 2 Client-frameworks: SOS.js and SWC" • (Historical) weather data in WMS-T and SOS" " Tracked on https://github.com/Geonovum/sospilot/issues