Observation stations in the water temperature and wave buoy network
Lets find out what observation stations are in the water temperature and wave buoy network of the Finnish Meteorological Institute. Because the Web Feature Service (WFS) of the Institute uses stored queries extensively, we must solve which stored query returns Environmental Monitoring Network data. All available stored queries in the service can be fetched using ListStoredQueries request.
In the result, there is a stored query that returns EnvironmentalMonitoringNetwork features. The stored query identifier is fmi::ef::networks. We can use the identifier on GetFeature request.
The GetFeature result includes multiple EnvironmentalMonitoringNetwork features. Examining the result, we notice there is a network for buoys (for example you can search "buoy" text from the document). The content of the buoy network description includes a link to the network facilities it contains.
The result includes multiple EnvironmentalMonitoringFacility features. Each feature contains a buoy that is operational at the moment. We can also check operational buoys in the year 2010. To do so, we must check if there are time related request parameters supported.
The result says the stored query supports starttime and endtime request parameters. We can limit the time and get the operational stations in the year 2010.
Wave height on the Baltic Sea
As we learned from the previous example, operational buoys can be listed by using the following request.
Every buoy has some spatial location expressed with coordinates. We can look at the coordinates and find the Pohjois-Itameri aaltopoiju (Northern Baltic Proper wavebuoy) station that is located in the Baltic Sea (latitude 59.250000 longitude 20.996830). Its numerical fmisid identifier is 134220. The identifier allow us to target a data query to that station, exactly.
Next we must find out a stored query that returns wave observations. From the result of ListStoredQueries request we find fmi::observations::wave::timevaluepair stored query which title says "Wave and Water temperature observations". Then we can make GetFeature request with the storedquery identifier (storedquery_id=fmi::observations::wave::timevaluepair&) and the station identifier (fmisid=134220&).
The result contains data from multiple measurands (if the sea is not freezed). Each wfs:member in the result contains data from one measurand. Behind the attribute link of om:observedProperty element is described which wfs:member contains data from the wave height measurand. The measurand parameter name is WaveHs.
It is also possible to fetch wave height forecast data for the location of buoy. The coordinates are already known from the result of fmi::ef::stations stored query. The result of ListStoredQueries request gives us fmi::forecast::wam::point::timevaluepair identifier. Its title is "WAM Wave Model Point". The message is not the most descriptive but it does return forecast data for the Baltic Sea. We can check the details using DescribeStoredQueries request.
Combining the stored query identifier (storedquery_id=fmi::forecast::wam::point::timevaluepair&) and the coordinates (latlon=59.250000,20.996830&) of buoy to GetFeature request, we get wave height forecast to the location of buoy.
Every wfs:member in the result also contains om:observedProperty element with a link to the description of forecast parameter as was in the result of observation query. The forecast parameter of wave height is SigWaveHeight.
We can go further with this usage example and combine the wave height observations and the forecast data to continuous time series from the past to the future. It requires use of starttime, endtime and timestep request parameters. It is possible that wave height observations do not come available instantly, which creates an empty gap between observations and the forecast. For getting forecast data from the past, it requires the use of time related request parameters. Also, the observations are returned in every 30 minutes and forecast in an hour period which requires use of timestep request parameter. I'll leave this task to you. Would you like to try?