1 of 27

Connected Systems SWG

The 127th OGC Member Meeting

Alex Robin, Sensiasoft / GeoRobotix

25 September 2023

​

1

Meeting

sponsors

2 of 27

SWG Progress Report

  • Reviewer’s Guide
  • SensorML JSON Schemas
  • Alignment with Feature API logical schema approach
  • Currently finalizing different aspects of the specification:
    • Experiments with Sampling Features
    • Experiments with different kinds of Hierarchical Systems
    • Experiments with linking to WMS/WCS or Coverage/Maps API
    • Experiments with generic binary formats (Protobuf, Flatbuff, Avro, etc…)
  • OSH Implementation

2

3 of 27

SWG Roadmap

  • Finalize Reviewer’s Guide - 10/2023
  • Finalize SensorML Extensions - 10/2023
  • Finalize CS API Part 1 - 11/2023
  • Finalize CS API Part 2 - 11/2023
  • OGC API Connected Systems ready for review - 11/2023

3

4 of 27

SWG Resources

4

5 of 27

SensorML JSON Schema�+ Extensions

5

6 of 27

SensorML Extensions

  • Added Deployment and DerivedProperty classes
  • Added JSON Schema
  • Changes from XML encoding
    • name -> label (conflict btw ‘name’ attribute and ‘name’ element from XML)
    • Single lists for identifiers, classifiers, keywords, contacts, documents.
    • Keep multiple lists for characteristics / capabilities
    • Position as GeoJSON Point, SWE Vector or Pose (GeoPose)
    • Position by linking to Datastream (remove process option)
    • Use weblinking JSON for references (typeOf, components, etc…)

​

6

7 of 27

Logical Schemas

7

8 of 27

Formats Used

8

Resource Type

Encoding Formats (in Part 1/2)

Encoding Formats (in future Extensions)

Procedure

GeoJSON/JSON-FG, SensorML JSON

FlatGeoBuff, Protobuf

System

GeoJSON/JSON-FG, SensorML JSON

FlatGeoBuff, Protobuf

Deployment

GeoJSON/JSON-FG, SensorML JSON

FlatGeoBuff, Protobuf

Properties

SensorML JSON

​

DataStream

CSAPI JSON

​

Observation

CSAPI JSON (O&M model)

Protobuf, FlatBuffers

ControlStream

CSAPI JSON

​

Command

CSAPI JSON

Protobuf, FlatBuffers

CommandStatus

CSAPI JSON

Protobuf, FlatBuffers

SystemEvent

SensorML JSON

​

9 of 27

Feature API Logical Schema

  • Goal is to align with logical schema approach of Feature API (future Part 5?)
    • Logical schema = Encoding independent description of feature properties for a given collection
    • CSAPI also uses the approach to describe observation results/parameters (via DataStream resource) and command parameters (via ControlStream resource)
    • Encoding specific schemas also provided (links back to property description in the logical schema)
  • SWG decided to use SWE Common JSON as our logical schema language as the modified JSON Schema language used by Feature API Part 5 doesn’t provide all needed functionality yet (future revisions will align on Part 5 if appropriate)
  • Make it work with Protobuf and FlatBuffers

​

9

10 of 27

Example: Logical Schema with Protobuf

10

syntax = "proto3";

import "google/protobuf/timestamp.proto";

​

message Observation {

/* datastream ID */

optional int64 datastream_id = 1;

​

/* sampling feature ID */

optional int64 sf_id = 2 [ default = 0 ];

​

/* sampling time */

Timestamp time = 3 [ (schema_ref) = "phenomenonTime" ];

​

/* pan (deg) */

float pan = 1 [ (schema_ref) = "result/pan"];

/* tilt (deg) */

float tilt = 2 [ (schema_ref) = "result/tilt" ];

​

/* zoom factor (%) */

float zoom = 3 [ (schema_ref) = "result/zoom" ];

}

​

"resultSchema": {

"type": "DataRecord",

"fields": [

{

"name": "pan",

"type": "Quantity",

"definition": "http://sensorml.com/ont/swe/property/PanAngle",

"label": "Pan Angle",

"description": "Rotation of the camera around its vertical axis...",

"uom": {

"code": "deg"

}

},

{

"name": "tilt",

"type": "Quantity",

"definition": "http://sensorml.com/ont/swe/property/PanAngle",

"label": "Tilt Angle",

"description": "Rotation of the camera around its horizontal axis...",

"uom": {

"code": "deg"

}

},

{

"name": "zoom",

"type": "Quantity",

"definition": "http://sensorml.com/ont/swe/property/ZoomFactor",

"label": "Zoom Factor",

"description": "Amount of zoom, 0 being the highest FOV and 100 being the lowest",

"uom": {

"code": "%"

}

}

]

}

​

Protobuf Schema (.proto)

Logical Schema (SWE Common JSON)

"result": {

"pan": 145.0,

"tilt": 16.5,

"zoom": 25,

}

11 of 27

Hierarchical Systems

11

12 of 27

Hierarchical Systems - 1

  • Use Cases: Different kinds of hierarchical Systems in scope
    • Systems with built-in components
    • Systems with interchangeable components/payloads
    • Groups of Systems (Sensor Networks, etc.)
    • Teams of persons carrying sensors or acting as sensors

​

  • Modeled with different combinations of Procedures / Systems / Deployments

​

12

13 of 27

Hierarchical Systems - 2

  • In the API, components (a.k.a sub-systems) can be described:
    • At the procedure level
    • At the system (instance) level
    • At the deployment level
  • Procedure Level�Components are described as part of a procedure (i.e. "system model") if they are not designed to be interchangeable in each instance.
  • System Level�Components are described as part of the system (instance) if they can be combined differently in each instance, but don't change often during the lifetime of the system.
  • Deployment Level�Components are attached to a parent system at deployment time if they are interchangeable payloads (i.e. they can be changed during the lifetime of the parent system)

13

14 of 27

Hierarchical Systems - 3

  • Procedure/System components can be described either:
    • Inline as part of the parent description
    • As a separate resource referenced from the parent description

​

  • Same pattern as UML composition vs. aggregation

​

  • Inline = UML composition: When components don't exist independently of the parent (i.e. they cannot be purchased separately / cannot be shared by multiple procedures or system instances) - ex: MavicPro�
  • By Reference = UML aggregation: Components are described as separate resources and linked if they can be reused as part of multiple procedures or attached to different parent systems at different times - ex: Saildrone, Nexrad

14

15 of 27

Sampling Features

15

16 of 27

Sampling Features

  • New Sampling Features defined in OGC API - Connected Systems
    • SamplingSphere with center and radius
    • SamplingFrustum (used for remote optical sensors, e.g. video cam, spaceborne EO instruments, etc.)
    • FeaturePart to identify a part of a feature of interest by name (e.g. CPU, fuel tank, engine, etc.)
  • TBD
    • SamplingEllipsoid with center, major and minor radiuses
    • RadarLobe?

​

16

17 of 27

Mobile Sampling Features - 1

  • Extension of Spatial Sampling Features to provide position/pose relative to other system (platform)
  • Saildrone Example

Several sampling features moving along with the platform

    • need at least 3 sampling features since they have different sampled features
    • don’t want to insert separate locations for each sampling features
    • better to express position relative to platform

17

18 of 27

Web Links

18

19 of 27

General Approach for Links

  • Two types of links:
    • as resource properties (with @link suffix)
    • in ‘links’ array�
  • Use links within the resource itself when part of the model (i.e. everything that would be provided with the resource on POST/PUT)�
  • Use ‘links’ array for auxiliary links (often auto-generated by server) such as:
    • self link
    • canonical URL
    • alternate encoding formats

19

20 of 27

Links to External Resources

  • Use JSON profile of Web Linking (RFC8288)�
  • Use RFC 6690 to identify target API
    • defines additional link properties (beyond ‘href’, ‘title’ and media type)
    • ‘if’ = interface type: used to identify target service or API (e.g. API Coverages)
    • ‘rt’ = resource type

20

21 of 27

Links to Domain Features - 1

  • Can link to external domain features

21

Observation

System

Domain�Feature

Sampling

Feature

Link�href = URL of Feature resource �if = http://www.opengis.net/spec/ogcapi-features-1/1.0

e.g. GW_Aquifer�HY_River, HY_Lake

(Proxy)

Feature

Link�rel = alternate�

22 of 27

Links to Domain Features - 1

22

{

"type": "Feature",

"id": "SP001",

"geometry": {

"type": "Point",

"coordinates": [ 12.31, -86.98]

},

"properties": {

"uid": "urn:x-usgs:sites:301244087575701",

"name": "USGS Site #301244087575701",

"description": "Well at MOBILE RIVER SAWMILL CORP",

"featureType": "http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/SF_SamplingPoint",

"sampledFeature@link": {

"href": "https://api.usgs.gov/collections/hydrological_features/items/112TRRC?f=json",

"type" : "application/geo+json",

"title": "Aquifer 112TRRC",

"if": "http://www.opengis.net/spec/ogcapi-features-1/1.0",

}

},

"links": [

{

"href" : "https://data.example.org/api/samplingFeatures/SP001?f=json",

"rel" : "self",

"type" : "application/geo+json",

"title" : "this document"

}, {

"href" : "https://data.example.org/api/samplingFeatures/SP001?f=html",

"rel" : "alternate",

"type" : "text/html",

"title" : "this resource as HTML"

}

]

}

​

​

​

​

23 of 27

Links to Coverage Results - 1

  • Can link an Observation Result to external Coverage resource�(e.g. Coverages API, Maps API, WCS, WMS)

23

Datastream

System

External�Coverage

Embedded Result

Link�href = URL of coverage resource �if = http://www.opengis.net/spec/ogcapi-coverages-1/1.0

rt = Coverage�

Observation

24 of 27

Links to Coverage Results - 2

24

{

"id": "fefaig45w46v5186d6w",

"datastream@id": "f44f85rrt",

"foi@id": "55f48g48th",

"phenomenonTime": "2023-04-03T18:45:23Z",

"resultTime": "2023-04-03T18:45:23Z",

"result@link": {

"href": "https://data.x-ecmwf.int/wms?service=WMS&version=1.1.0&request=GetMap&format=image/tiff&� layers=HRES-2T-20230215-0600-T1&bbox=-180,90,180,-90&width=3600&height=1800&srs=EPSG:4326",

"title": "Imagery on external WMS server",

"type": "image/tiff; application=geotiff",

"if": "http://www.opengis.net/def/serviceType/ogc/wms/1.1"

}

}

25 of 27

OpenSensorHub Demo

25

26 of 27

  • Hierarchical Systems (Procedures and Systems)
  • Sampling Features
  • Links to Ontologies

​

26

27 of 27

Thank you!

27