AQUARIUS Timeseries (AQTS 3.x)
This is an import that makes use of the custom import mechanism described in Custom import formats. The AQUARIUS server import offers two ServerParsers (AquariusTimeSeriesSoapServerParser.java and AquariusTimeSeriesRestServerParser.java), and a few parsers to parse the Aquarius response formats:
...
In order to activate the AQUARIUS Server import as a FEWS import, it is required to setup a TimeSeriesImportRun module configuration file and an accompanying IdMap file. Also the bin directory containing all AQUARIUS resources must be placed in a location that can be accessed by FEWS. For the source code, see: AquariusTimeSeriesRestServerParser.java
Example Import configuration file for the REST service:
|
<?xml version="1.0" encoding="UTF-8"?> |
<timeSeriesImportRun xmlns="http://www.wldelft.nl/fews" |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
xsi:schemaLocation="http://www.wldelft.nl/fews file:/d:/FEWS-code/trunk/xml-schemas/timeSeriesImportRun.xsd"> |
<!-- This is an example import configuration file for importing Observations and Measurements data from a service --> |
<
import
>
<general>
<import>
<general>
<parserClassName>nl.wldelft.aquarius.timeseriesparsers.AquariusTimeSeriesRestServerParser</parserClassName> |
<binDir>%REGION_HOME%/Modules/aquarius-bin</binDir> |
hostaddUPI</serverUrl>
<user>user</user>
<password>password</password>
<relativeViewPeriod addUPI</serverUrl>
<user>dummy_username</user>
<password>dummy_password</password>
<relativeViewPeriod unit="hour" start="-5" end="0" startOverrulable="true" endOverrulable="true"/> |
<idMapId>IdImportAquarius</idMapId>
<importTimeZone>
<idMapId>IdImportAquarius</idMapId>
<unitConversionsId>UnitConversionsAquarius</unitConversionsId>
<flagConversionsId>ImportFlagConversion</flagConversionsId>
<importTimeZone>
<timeZoneOffset>-06: |
00
<
<properties>
<properties>
<!-- Optional: This option allows the import to control how timeseries are to be imported. If this option |
is set to is
set to 'false' then all timeseries for all locations are imported in one single call to the webservice. |
If this option is set to If
this option is set to 'true' then the import will loop over the available list of locations and import |
all timeseries belonging to a location in a single call.
<bool
all
timeseries belonging to a location in a single call.
<bool key="LoopOverLocations" value="false"/> |
<!-- Optional: Filter option provided by the AQUARIUS server. The AQUARIUS server can provide some |
different views from which to retrieve data. If the PublishView is not know then omit this value. -->
<!--
<string
different
views from which to retrieve data. If the PublishView is not know then omit this value. -->
<!-- <string key="PublishView" value="test"/> --> |
<!-- Optional: With this option it is possible to skip the 'GetDataSetList' call to the AQUARIUS server. |
What this call does is retrieve all the timeseries ids available for one or more requested location ids. If the
import IdMap has already mapped the FEWS parameter and location ids to AQUARIUS timeseries ids then the
'SkipDataSetList' value must be set to 'true'. -->
<bool
key=
"SkipDataSetList"
What
this call does is retrieve all the timeseries ids available for one or more requested location ids. If the
import IdMap has already mapped the FEWS parameter and location ids to AQUARIUS timeseries ids then the
'SkipDataSetList' value must be set to 'true'. -->
<bool key="SkipDataSetList" value="false"/> |
<timeSeriesSet>
<moduleInstanceId>ImportAquarius</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>MyPar</parameterId>
<locationSetId>MyLocSet</locationSetId>
<timeSeriesType>external historical</timeSeriesType>
<timeStep
<timeSeriesSet>
<moduleInstanceId>ImportAquarius</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>MyPar</parameterId>
<locationSetId>MyLocSet</locationSetId>
<timeSeriesType>external historical</timeSeriesType>
<timeStep unit="nonequidistant"/> |
<readWriteMode>add originals</readWriteMode>
<synchLevel>
1
</synchLevel>
</timeSeriesSet>
</
import
>
</timeSeriesImportRun>
<readWriteMode>add originals</readWriteMode>
<synchLevel>1</synchLevel>
</timeSeriesSet>
</import>
</timeSeriesImportRun>
|
Example IdMap file:
Code Block |
---|
title | Map AQUQRIUS Timeseries idsAquarius IdMap |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<idMap version="1.1" xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/idMap.xsd">
<!--
OPTION1: map internal timeseries directly to external timeseries (datasets)
When using this option the value 'SkipDataSetList' in the Aquarius import module must be set to 'true'.
-->
<map internalLocation="MyLoc1" internalParameter="MyPar1" externalLocation="AquariusDataSetId01" externalParameter="notused" />
<map internalLocation="MyLoc1" internalParameter="MyPar2" externalLocation="AquariusDataSetId02" externalParameter="notused" />
<!--
OPTION2: map internal timeseries to external locations
When using this option the value 'SkipDataSetList' in the Aquarius import module must be set to 'false'.
-->
<map internalLocation="MyLoc1" internalParameter="MyPar1" externalLocation="AquariusLoc1" externalParameter="notused" />
<map internalLocation="MyLoc1" internalParameter="MyPar2" externalLocation="AquariusLoc2" externalParameter="notused" />
</idMap> |
AQUARIUS RatingCurves
The import of rating curves also makes use of the custom import mechanism described in Custom import formats. The AQUARIUS server import offers one ServerParsers for parsing rating curves (AquariusRatingCurveSoapServerParser.java). The following parser is used to parse the Aquarius rating curve response format:
- Aquarius GetRatingTable response: CsvRatingTableParser.java
The server parser interacts with an ADCON programming interface as described their AQUARIUS Publish Web Service API document. This document is also available online; http://nrdata.nps.gov/Programs/Water/Aquarius/AQUARIUS%203.8%20Publish%20Service%20API%20Manual.pdf.
For accessing the AQUARIUS server it is necessary to provide login credentials. These credentials are used to obtain an Aquarius authentication token. This token needs to be set as a request property for each data request.
FEWS configuration
In order to activate the AQUARIUS Server import as a FEWS import, it is required to setup a TimeSeriesImportRun module configuration file and an accompanying IdMap file. Also the bin directory containing all AQUARIUS resources must be placed in a location that can be accessed by FEWS. For the source code see: AquariusRatingCurveSoapServerParser.java
Example Import Rating Curve configuration file for the service:
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<timeSeriesImportRun xmlns="http://www.wldelft.nl/fews"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.wldelft.nl/fews file:/d:/FEWS-code/trunk/xml-schemas/timeSeriesImportRun.xsd">
<!-- This is an example import configuration file for importing Rating Curve data from a service -->
<import>
<general>
<parserClassName>nl.wldelft.aquarius.ratingcurveparsers.AquariusRatingCurveSoapServerParser</parserClassName>
<binDir>%REGION_HOME%/Modules/aquarius-bin</binDir>
<serverUrl>http://dummy_hostname:port/addUPI</serverUrl>
<user>dummy_username</user>
<password>dummy_password</password>
<relativeViewPeriod unit="hour" start="-5" end="0" startOverrulable="true" endOverrulable="true"/>
<idMapId>IdImportAquariusRatingCurves</idMapId>
<unitConversionsId>UnitConversionsAquarius</unitConversionsId>
<flagConversionsId>ImportFlagConversion</flagConversionsId>
<importTimeZone>
<timeZoneOffset>-06:00</timeZoneOffset>
</importTimeZone>
</general>
<locationSetId>Aquarius.Ratings</locationSetId>
</import>
</timeSeriesImportRun>
|
Example IdMap file:
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<idMap version="1.1" xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/idMap.xsd">
<!-- IdMapping for the Aquarius import requires that the FEWS parameter is mapped to:
externalQualifier = Aquarius ratingcurve input parameter,
externalQualifier1 = Aquarius ratingcurve output parameter
externalQualifier2 = either StageDischarge or DischargeStage
-->
<locationIdFunction internalLocationSet="Aquarius.Ratings" externalLocationFunction="@AQUARIUSID@" externalQualifierFunction="HG" externalQualifierFunction1="QR" externalQualifierFunction2="StageDischarge"/>
</idMap> |
AQUARIUS Timeseries AQTS 20xx
Depending on the server version a different parser might be needed.
When the AQUARIUS server has a version similar to AQTS 3.x the old legacy parser (documented on top of this page) should be used.
When the AQUARIUS server has a version similar to AQTS is 20xx a newer version of the parser is needed:
nl.wldelft.aquarius.timeseriesparsers.AquariusTimeSeriesRestServerParserV2
The FEWS configuration will mostly be similar but the parser uses a by Aquatic Informatics provided library. This is currently version 19.1.2 which is still compatible with server versions up to 20.3.1 and probably future versions as well.
Code Block |
---|
language | xml |
---|
title | Aquarius import (AQTS 20xx) |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<timeSeriesImportRun xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews
http://fews.wldelft.nl/schemas/version1.0/timeSeriesImportRun.xsd">
<!-- This is an example import configuration file for importing Observations and Measurements data from a service -->
<import>
<general>
<parserClassName>nl.wldelft.aquarius.timeseriesparsers.AquariusTimeSeriesRestServerParserV2</parserClassName>
<binDir>%REGION_HOME%/Modules/aquarius</binDir>
<serverUrl>http://dummy_hostname:port/AQUARIUS/Publish/v2</serverUrl>
<user>dummy_username</user>
<password>dummy_password</password>
<relativeViewPeriod unit="day" start="-365" end="0" startOverrulable="true" endOverrulable="true"/>
<idMapId>IdImportAquarius</idMapId>
<flagConversionsId>ImportFlagConversion</flagConversionsId>
<importTimeZone>
<timeZoneOffset>-10:00</timeZoneOffset>
</importTimeZone>
</general>
<properties>
<!-- Optional: If the external location ids are equal to the TimeSeriesUniqueIds then
set value to 'true'. This way it is possible to skip the GetTimeSeriesDescriptionList requests.
Default:=false
-->
<bool key="SkipDataSetList" value="false"/>
<!-- Optional: Only used if SkipDataSetList=false. In order to retrieve timeSeriesUniqueIds it
is necessary to call the GetTimeSeriesDescriptionList function. This function can be called per location
or for all locations in one go. Depending on the number of timeSeries on the server it can
be necessary to loop per location.
Default:=true (to avoid server errors)
-->
<bool key="LoopOverLocations" value="true"/>
</properties>
<timeSeriesSet>
<moduleInstanceId>ImportMeasured</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>H.obs</parameterId>
<locationSetId>Aquarius.Ratings</locationSetId>
<timeSeriesType>external historical</timeSeriesType>
<timeStep unit="nonequidistant"/>
<readWriteMode>add originals</readWriteMode>
<synchLevel>1</synchLevel>
<expiryTime unit="day" multiplier="365"/>
</timeSeriesSet>
</import>
</timeSeriesImportRun>
|