3

I need some help getting weather details temperature etc. out of this GML encoded WMS response XML file. This what I get from weather service that provides open data with Catalog Service for Web (CSW), Web Map Service (WMS) and Web Feature Service (WFS). Unlike JSON/XML, I have no idea what is happening in this file. Please suggest some solution for Swift 3.

<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection
    timeStamp="2017-07-31T15:48:01Z"
    numberMatched="1"
    numberReturned="1"
    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:omso="http://inspire.ec.europa.eu/schemas/omso/3.0"
    xmlns:ompr="http://inspire.ec.europa.eu/schemas/ompr/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/omso/3.0 http://inspire.ec.europa.eu/schemas/omso/3.0/SpecialisedObservations.xsd
    http://inspire.ec.europa.eu/schemas/ompr/3.0 http://inspire.ec.europa.eu/schemas/ompr/3.0/Processes.xsd
    http://xml.fmi.fi/namespace/om/atmosphericfeatures/1.0 http://xml.fmi.fi/schema/om/atmosphericfeatures/1.0/atmosphericfeatures.xsd">

    <wfs:member>
        <omso:GridSeriesObservation gml:id="WFS-l9pen.SrlipXUb8ZfAc8nS2h_8.JTowuYWbbpdOs2_llx4efR060aeWzDtdOufXlmw48rp1w36d3R0629dnTTw36d3THv7ZeWHPlhaWLLn07qmnbltQ_wp37hjvCY2PlzrUi0Kcd06aMmrhnZd2Spp25bUP8KhE4V2nBm07sk7Lh5ZefSth2ackhmZ8u_Tk51mNmbRy2ZujXl899_LJf39svLvy09MOLZliaWzL2y7KnnhlqZmzfjw7MtambTfjSV3XpmcNbbh8RNPPph3Y8tK1dCA1tunnz07s9TL46VjTsM5lbd.TLsrM0aeWzDtZXDDyw7a1I.XfwkZdOfR0rWqZdvDLyw9OvLLWhQ5ZefPryy1oSOu3Tk09PNbVfTuyRNPLLj6ad.6tavp3ZKfDLlyTadZ1fTuyVZtOs6vp3ZK02nWtNw.NO3rtr6d2StCvp3ZI_Xn0rQiZe9Dfp3dK3qm_ph2Q9m_rkh7.2XlW5Xy4emjLyp.duLfsZ1tTN_eHs39ckPf2y8q4JuXJp67Yezf1yQ9_bLyrckac.iHs39ckPf2y8q3qHLLj08NPTD0079zHRXNQ5Zcenhp6Yemnfug7d_Xd0r2pYcmnD00790fZvxYdkHHj67euzD00791d1LDk04emnfumV4OPH129dmHpp37qwwqWHJpw9NO_dOy9KfXlmw48syvBx4.u3rsw9NO_dWGFSw5NOHpp37p2XpT68s2HHlp14OPH129dmHpp37q.KWHJpw9NO_dE05s3Xnlg48fXb12YemnfubnPpv5ZcnHrl5eb.nJXmFm26XTrNv5ZceHn0dOtGnlsw7XTrn15ZsOPK6dcN.nd0dOtvXZ008N.nd0x7.2Xlhz5Wh007ctPpl4T8hNDpp25bW_dlrGq1IYA-">
                     <om:phenomenonTime>
                <gml:TimePeriod gml:id="time-interval-1-1">
                    <gml:beginPosition>2017-07-31T16:00:00Z</gml:beginPosition>
                    <gml:endPosition>2017-08-02T03:00:00Z</gml:endPosition>
                </gml:TimePeriod>
            </om:phenomenonTime>
            <om:resultTime>
                <gml:TimeInstant gml:id="time-1-1">
                    <gml:timePosition>2017-07-31T12:00:00Z</gml:timePosition>
                </gml:TimeInstant>
            </om:resultTime>

        <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/hirlam"/>
            <om:parameter>
                <om:NamedValue>
                    <om:name xlink:href="http://xml.fmi.fi/inspire/process/hirlam"/>
                    <om:value>
                        <gml:TimeInstant gml:id="analysis-time-1-1">
                            <gml:timePosition>2017-07-31T12:00:00Z</gml:timePosition>
                        </gml:TimeInstant>
                    </om:value>
                </om:NamedValue>
            </om:parameter>
            <om:observedProperty  xlink:href="http://data.fmi.fi/fmi-apikey/e35dc8fd-a855-4db5-a327-418120f64a86/meta?observableProperty=forecast&amp;param=GeopHeight,Temperature,Pressure,Humidity,WindDirection,WindSpeedMS,WindUMS,WindVMS,MaximumWind,WindGust,DewPoint,TotalCloudCover,WeatherSymbol3,LowCloudCover,MediumCloudCover,HighCloudCover,Precipitation1h,PrecipitationAmount,RadiationGlobalAccumulation,RadiationLWAccumulation,RadiationNetSurfaceLWAccumulation,RadiationNetSurfaceSWAccumulation,RadiationDiffuseAccumulation&amp;language=eng"/>
                    <om:featureOfInterest>
                <sams:SF_SpatialSamplingFeature gml:id="enn-s-1-1-">
          <sam:sampledFeature>
        <target:LocationCollection gml:id="sampled-target-1-1">
            <target:member>
            <target:Location gml:id="forloc-geoid-634963-pos">
                <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/geoid">634963</gml:identifier>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Tampere</gml:name>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/geoid">634963</gml:name>
            <target:representativePoint xlink:href="#point-634963"/>
            <target:country codeSpace="http://xml.fmi.fi/namespace/location/country">Finland</target:country>
            <target:timezone>Europe/Helsinki</target:timezone>
            <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Finland</target:region>              
            </target:Location></target:member>
        </target:LocationCollection>
       </sam:sampledFeature>
                <sams:shape>
                    <gml:MultiPoint gml:id="sf-1-1-">
                        <gml:pointMembers>  
                           <gml:Point gml:id="point-634963" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
                               <gml:name>Tampere</gml:name>
                               <gml:pos>61.49911 23.78712 </gml:pos>
                           </gml:Point>
                        </gml:pointMembers>
                    </gml:MultiPoint>
                </sams:shape>
            </sams:SF_SpatialSamplingFeature>
        </om:featureOfInterest>
              <om:result>
        <gmlcov:MultiPointCoverage gml:id="mpcv-1-1">
          <gml:domainSet>
            <gmlcov:SimpleMultiPoint gml:id="mp-1-1" srsName="http://xml.fmi.fi/gml/crs/compoundCRS.php?crs=4258&amp;time=unixtime" srsDimension="3">
              <gmlcov:positions>
                61.49911 23.78712  1501516800
                61.49911 23.78712  1501520400
                61.49911 23.78712  1501524000
                61.49911 23.78712  1501527600
                61.49911 23.78712  1501531200
              </gmlcov:positions>
            </gmlcov:SimpleMultiPoint>
          </gml:domainSet>
          <gml:rangeSet>
            <gml:DataBlock>
              <gml:rangeParameters/>
              <gml:doubleOrNilReasonTupleList>
                113.01 18.26 1007.03 92.74 259.0 3.79 
                113.01 17.79 1007.48 90.02 250.0 3.04 
                113.01 17.13 1007.82 93.62 229.0 2.19 
                113.01 16.42 1008.18 95.53 216.0 2.26 
                113.01 15.9 1008.89 97.09 211.0 2.74 
              </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="GeopHeight"  xlink:href="http://"/>
              <swe:field name="Temperature"  xlink:href="http://"/>
              <swe:field name="Pressure"  xlink:href="http://"/>
              <swe:field name="Humidity"  xlink:href="http://"/>
              <swe:field name="WindDirection"  xlink:href="http://"/>
              <swe:field name="WindSpeedMS"  xlink:href="http://"/>
              </swe:DataRecord>
          </gmlcov:rangeType>
        </gmlcov:MultiPointCoverage>
      </om:result>

        </omso:GridSeriesObservation>
    </wfs:member>

</wfs:FeatureCollection>
Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
Jim H.
  • 285
  • 1
  • 2
  • 15

1 Answers1

0

I cannot help you with swift, but I can maybe point you to how to read this file:

What you basically need is these three elements:

  <gmlcov:positions>
    61.49911 23.78712  1501516800
    61.49911 23.78712  1501520400
    61.49911 23.78712  1501524000
    61.49911 23.78712  1501527600
    61.49911 23.78712  1501531200
  </gmlcov:positions>

  <gml:doubleOrNilReasonTupleList>
        113.01 18.26 1007.03 92.74 259.0 3.79 
        113.01 17.79 1007.48 90.02 250.0 3.04 
        113.01 17.13 1007.82 93.62 229.0 2.19 
        113.01 16.42 1008.18 95.53 216.0 2.26 
        113.01 15.9 1008.89 97.09 211.0 2.74 
   </gml:doubleOrNilReasonTupleList>

 <swe:DataRecord>
    <swe:field name="GeopHeight"  xlink:href="http://"/>
    <swe:field name="Temperature"  xlink:href="http://"/>
    <swe:field name="Pressure"  xlink:href="http://"/>
    <swe:field name="Humidity"  xlink:href="http://"/>
    <swe:field name="WindDirection"  xlink:href="http://"/>
    <swe:field name="WindSpeedMS"  xlink:href="http://"/>
 </swe:DataRecord>

The first one tells you the position and the time of the measurement:

61.49911 23.78712 1501516800

Latitude: 61.49911
Longitude: 23.7812
Unixtime:   1501516800 --> which translates to: Mon Jul 31 16:00:00 2017 UTC

The second one is the actual measurement data, and the third one gives you the meaning of the measurement.
So this is what you get for the first measurement:

 GeopHeight | Temperature | Pressure | Humidity | WindDirection | WindSpeedMs
 113.01     | 18.26       | 1007.03  | 92.74    | 259.0         | 3.79

I hope this helps.

ylka
  • 293
  • 8
  • 14