SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie SensorWeb SOS Pilot RIVM/Geonovum - Status

FIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE
 
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 NetworksJean-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 ElasticsearchRafał 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 & ElasticsearchSematext 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 basicsFernando 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
 
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 PrometheusFabian Reinartz
 
FIWARE IoT Proposal & Community
FIWARE IoT Proposal & CommunityFIWARE IoT Proposal & Community
FIWARE IoT Proposal & CommunityFIWARE
 
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.ioGü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 GatewayEurotech
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
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
 
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 StackJakub Hajek
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on MobileAdam 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 ThingsJean-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 KubernetesSreenivas Makam
 

Ähnlich wie 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 - 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
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
 
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
 

Mehr von 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 2Just 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 1Just 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 APIJust 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 PlatformJust van den Broecke
 
OSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-OpeningOSGeo.nl-NewYearsParty-2018-Opening
OSGeo.nl-NewYearsParty-2018-OpeningJust 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 ToolsJust 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 2016Just 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 - OverviewJust 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 2016Just van den Broecke
 
Smart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - StandardsSmart Emission - Data - Viewers - Standards
Smart Emission - Data - Viewers - StandardsJust 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 progressJust 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 NavigatieJust 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 2014Just 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 KadasterJust van den Broecke
 

Mehr von 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
 

Kürzlich hochgeladen

Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyAnusha Are
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 

Kürzlich hochgeladen (20)

Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 

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