European Commission logo
INSPIRE Community Forum

Coverage valued result type in omso:PointObservation?

Hi,

I'm modelling measurement results of particle concentrations in air collected over a period of 1 week to a month using INSPIRE O&M data model.

The results of these separate concentration measurements do form a time series, but since it's important to know exactly the start and end times of each measurement time, and also which ones of the known possible particles were observed in each measurement event, I'm thinking of using omso:PointObservation for modelling each of the concentration measurement events at a location.

According the framework document "D2.9 Draft Guidelines for the use of Observations & Measurements and Sensor Web Enablement-related standards in INSPIRE Annex II and III data specification development" (http://inspire.ec.europa.eu/documents/Data_Specifications/D2.9_O&M_Guidelines_v2.0.pdf) at chapter "6.6.1.1. Point Observations" the type of the result property for PointObservations should be CV_DiscretePointCoverage, with the following example text: 

The result should be a single valued coverage recording an estimate of the observed property e.g. 22.2 (Celsius) 

The swe:DataRecord would suit this case nicely:

     <om:result>
        <swe:DataRecord>
          <swe:field name="ce137-concentration">
            <swe:Quantity>
              <swe:description>Cesium-137 radionucleus activity concentration in air as Bq/m2</swe:description>
              <swe:uom code="Bq/m2" />
              <swe:value>0.13</swe:value>
            </swe:Quantity>
          </swe:field>
          <swe:field name="sr90-concentration">
            <swe:Quantity>
              <swe:description>Strontium-90 radionucleus activity concentration in air as Bq/m2</swe:description>
              <swe:uom code="Bq/m2" />
              <swe:value>0.5</swe:value>
            </swe:Quantity>
          </swe:field>
        </swe:DataRecord>
      </om:result>

The problem is that a swe:DataRecord can hardly be considered to be an instance of CV_DiscretePointCoverage. A PointObservation is always about a single point in time and space, so using gml:MultiPointCoverage with range and domain sets containing just that one point seems quite wasteful to me:

         <om:result>
          <gmlcov:MultiPointCoverage gml:id="mpcv1-1-1">
            <gml:domainSet>
              <gmlcov:SimpleMultiPoint gml:id="mp1-1-1" srsName="http://www.opengis.net/def/crs/EPSG/0/4979" srsDimension="3">
                <gmlcov:positions>60.2093653 25.05445687 30</gmlcov:positions>
              </gmlcov:SimpleMultiPoint>
            </gml:domainSet>    
            <gml:rangeSet>
             <gml:QuantityList uom="Bq/m2">
               0.13 0.5
             </gml:QuantityList>
            </gml:rangeSet>
            <gml:coverageFunction>
              <gml:CoverageMappingRule>
                <gml:ruleDefinition>Linear</gml:ruleDefinition>
              </gml:CoverageMappingRule>
            </gml:coverageFunction>
            <gmlcov:rangeType>
              <swe:DataRecord>
                <swe:field name="ce137-concentration">
                  <swe:Quantity>
                    <swe:description>Cesium-137 radionucleus activity concentration in air as Bq/m2</swe:description>
                    <swe:uom code="Bq/m2" />
                  </swe:Quantity>
                </swe:field>
                <swe:field name="sr90-concentration">
                  <swe:Quantity>
                    <swe:description>Strontium-90 radionucleus activity concentration in air as Bq/m2</swe:description>
                    <swe:uom code="Bq/m2" />
                  </swe:Quantity>
                </swe:field>
              </swe:DataRecord>
            </gmlcov:rangeType>
          </gmlcov:MultiPointCoverage>
      </om:result>

Has any of you already solved this problem somehow?

  • Alessandro SARRETTA

    By Alessandro SARRETTA

    Dear Illkka,

    looking at the example file posted here (https://themes.jrc.ec.europa.eu/discussion/view/40013/example-of-emf-file-gml) by Kathi Schleidt and related to the Air Quality Directive data model, I can see that also there the swe:DataRecord has been used for om:result

    Could you please have a look and discuss (here or in that topic) possible similarities?

  • Simon TEMPLER

    I find it also strange that CV_DiscretePointCoverage is required for the result in a PointObservation. Especially in light that the Guidelines for the use of Observations & Measurements say:

    "For the encoding of observations on pointsbe they individual one-time observations or time seriesthe results types provided in the OGC SWE Common package should suffice for most INSPIRE requirements."

    So, using SWE types like Quantity or DataRecord seems to be legit, and there are even encoding examples in Annex A of the same document. But they do not make use of the specialised PointObservation type, instead they use the generic OM_Observation.

    So I think the key question is, which of the following options are allowed and ensure a INSPIRE compliant encoding:

    • Use the specialised observation types (e.g. PointObservation) and use the result encoding specified as constraint in the Guildelines (e.g. CV_DiscretePointCoverage)
    • Use the specialised observation types (e.g. PointObservation) and use a different result encoding than specified in the guidelines
    • Use the non-specialised observation type OM_Observation with the result encoded based on SWE common
  • Katharina SCHLEIDT

    By Katharina SCHLEIDT

    Dear Ilkka,

    Again the question - what did you end up doing at the end of the day?

    I need to countercheck with Sylvain on the status of result encoding, but currently have the feeling we have more work to do here. A bit worried that the OM specializations are a bit very water heavy (well, it was the oceanographic group doing it, so ...), thus interested in your experiences in other domains

    :)

    Kathi

  • Ilkka RINNE

    Hi Kathi,

    What we ended up doing with the radionuclide observations, was the following:

    • A single omso:PointObservation for each collection & analysis events for one collector, with phenomenonTime as the collecting period and resultTime as the analysis time. As sometimes the same sample is re-analysed, we added a processParameter analysisNumber to separate the results of the original and the possible re-analysis.
    • The result is provided as gmlgov:MultiPointCoverage with gmlcov:SimpleMultiPoint as domainSet, gml:DataBlock as rangeSet and swe:DataRecord as rangeType. The domainSet contains just the numeric data of the result fields and the rangeType descriptions of the provided fields.
    • The number of the fields for a particular result depend on the number of the detected radionuclides: potentially the number of possible nuclides is quite high, but typically only a few are detected for each sample. The only field always present is the total volume of air pumped through the collector during the sampling.
    • I addition to the activity concentrations (in uBq/m3) also the uncertainty of each nuclide activity concentration result, percent (+/- X%) at sigma 1 (~68%) confidence interval is given as a separate field. Smaller the percentage means more certain (detection) result.

    A complete GetFeature result given below:

    <?xml version="1.0" encoding="UTF-8"?>
    <wfs:FeatureCollection
      timeStamp="2016-09-06T08:15:38Z"
      numberMatched="4"
      numberReturned="4"
      xmlns:wfs="http://www.opengis.net/wfs/2.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:om="http://www.opengis.net/om/2.0"
      xmlns:ompr="http://inspire.ec.europa.eu/schemas/ompr/3.0"
      xmlns:omso="http://inspire.ec.europa.eu/schemas/omso/3.0"
      xmlns:gml="http://www.opengis.net/gml/3.2"
      xmlns:gmd="http://www.isotc211.org/2005/gmd"
      xmlns:gco="http://www.isotc211.org/2005/gco"
      xmlns:swe="http://www.opengis.net/swe/2.0"
      xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
      xmlns:sam="http://www.opengis.net/sampling/2.0"
      xmlns:sams="http://www.opengis.net/samplingSpatial/2.0"
      xmlns:target="http://xml.fmi.fi/namespace/om/atmosphericfeatures/1.0"
      xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd
      http://www.opengis.net/gmlcov/1.0 http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd
      http://www.opengis.net/sampling/2.0 http://schemas.opengis.net/sampling/2.0/samplingFeature.xsd
      http://www.opengis.net/samplingSpatial/2.0 http://schemas.opengis.net/samplingSpatial/2.0/spatialSamplingFeature.xsd
      http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd
      http://inspire.ec.europa.eu/schemas/ompr/3.0 http://inspire.ec.europa.eu/schemas/ompr/3.0/Processes.xsd
      http://inspire.ec.europa.eu/schemas/omso/3.0 http://inspire.ec.europa.eu/schemas/omso/3.0/SpecialisedObservations.xsd
      http://xml.fmi.fi/namespace/om/atmosphericfeatures/1.0 http://xml.fmi.fi/schema/om/atmosphericfeatures/1.0/atmosphericfeatures.xsd">   <wfs:member>
        <omso:PointObservation gml:id="WFS-example-1">
          <om:phenomenonTime>
            <gml:TimePeriod gml:id="time1-1-3">
              <gml:beginPosition>2016-08-18T12:38:00Z</gml:beginPosition>
              <gml:endPosition>2016-08-25T10:33:00Z</gml:endPosition>
            </gml:TimePeriod>
          </om:phenomenonTime>
          <om:resultTime>
            <gml:TimeInstant gml:id="time2-1-3">
              <gml:timePosition>2016-08-29T06:57:00Z</gml:timePosition>
            </gml:TimeInstant>
          </om:resultTime>
          <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/stuk/air_radionuclides"/>
          <om:parameter>
            <om:NamedValue>
              <om:name xlink:href="http://inspire.ec.europa.eu/codeList/ProcessParameterValue/value/analysisNumber"/>
              <om:value>
                <gml:integerValue>1</gml:integerValue>
              </om:value>
            </om:NamedValue>
          </om:parameter>
         <om:observedProperty  xlink:href="http://data.fmi.fi/fmi-apikey/insert-apikey-here/meta?observableProperty=observation&amp;param=AC_P7D_avg&amp;language=eng"/>
          <om:featureOfInterest>
            <sams:SF_SpatialSamplingFeature gml:id="sampling-feature-1-1-3-fmisid-103428">
              <sam:sampledFeature>
                <target:Location gml:id="obsloc-3-fmisid-103428-pos">
                  <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/fmisid">103428</gml:identifier>
                  
                  <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Helsinki</gml:name>
                  <target:representativePoint xlink:href="#point-3-fmisid-103428"/>
                  <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Helsinki</target:region>
                  <target:region codeSpace="http://xml.fmi.fi/namespace/location/country">Finland</target:region>
                </target:Location>
              </sam:sampledFeature>
              <sams:shape>
                <gml:Point gml:id="point-3-fmisid-103428" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
                  <gml:name>Helsinki</gml:name>
                  <gml:pos>60.20905 25.05385</gml:pos>
                </gml:Point>
              </sams:shape>
            </sams:SF_SpatialSamplingFeature>
          </om:featureOfInterest>
          <om:result>
              <gmlcov:MultiPointCoverage gml:id="mpcv1-1-1-3">
                <gml:domainSet>
                  <gmlcov:SimpleMultiPoint gml:id="mp1-1-1-3" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
                    <gmlcov:positions>60.20905 25.05385</gmlcov:positions>
                  </gmlcov:SimpleMultiPoint>
                </gml:domainSet>
                <gml:rangeSet>
                  <gml:DataBlock>
                    <gml:rangeParameters />
                    <gml:doubleOrNilReasonTupleList>23984 2422.90 6</gml:doubleOrNilReasonTupleList>
                  </gml:DataBlock>
                </gml:rangeSet>
                <gml:coverageFunction>
                  <gml:CoverageMappingRule>
                    <gml:ruleDefinition>Linear</gml:ruleDefinition>
                  </gml:CoverageMappingRule>
                </gml:coverageFunction>
                <gmlcov:rangeType>
                  <swe:DataRecord>
                    <swe:field name="air-volume">
                      <swe:Quantity>
                        <swe:label>Air volume</swe:label>
                        <swe:description>Total volume of air sampled during the measurement.</swe:description>
                        <swe:uom code="m3"/>
                      </swe:Quantity>
                    </swe:field>
                    <swe:field name="Be-7">
                      <swe:Quantity>
                        <swe:label>Beryllium 7 activity concentration</swe:label>
                        <swe:description>Beryllium 7 radionuclide activity concentration in air.</swe:description>
                        <swe:uom code="uBq/m3" />
                      </swe:Quantity>
                    </swe:field>
                    <swe:field name="Be-7-uncertainty">
                      <swe:Quantity>
                        <swe:label>Relative uncertainty of Beryllium 7 result</swe:label>
                        <swe:description>Uncertainty of Beryllium 7 nuclide activity concentration result,
                          percent (+/- X%) at sigma 1 (~68%) confidence interval. Smaller the percentage means
                          more certain result.</swe:description>
                        <swe:uom code="%"/>
                      </swe:Quantity>
                    </swe:field>
                  </swe:DataRecord>
                </gmlcov:rangeType>
              </gmlcov:MultiPointCoverage>
          </om:result>
        </omso:PointObservation>
      </wfs:member>
    </wfs:FeatureCollection>
Environmental Monitoring & Observations

Environmental Monitoring & Observations

Environmental Monitoring Facilities, Observations and Measurements