The data access is handled by a system of plugins. They all offer the same interface, meaning that a plugin can transparently be replaced by another one. Since they might rely on third party libraries for accessing the data, they have been created as plugins, that is they are only compiled if requested when configuring the compilation with cmake. A plugin can therefore fail to run if it has not been compiled.
Writing a file happens via a wrapper for std::ofstream ofilestream that adds some functionality, like limiting the write access.
Please have a look at the support for coordinate systems.
Several data sources categories have been defined that can be provided by a different plugin. Each data source category is defined by a specific key in the configuration file (usually, io.ini):
A plugin is "connected" to a given data source category simply by giving its keyword as value for the data source key:
Each plugin might have its own specific options, meaning that it might require its own keywords. Please check in each plugin documentation the supported options and keys (see links below). Moreover, a given plugin might only support a given category for read or write (for example, PNG: there is no easy and safe way to interpret a given color as a given numeric value without knowing its color scale, so reading a png has been disabled). Finally, the plugins usually don't implement all these categories (for example, ArcGIS file format only describes 2D grids, so the ARC plugin will only deal with 2D grids), so please check what a given plugin implements before connecting it to a specific data source category.
So far the following plugins have been implemented (by keyword for the io.ini key/value config file). Please read the documentation for each plugin in order to know the plugin-specific keywords:
Plugin keyword | Provides | Description | Extra requirements | |
---|---|---|---|---|
Input | Output | |||
A3D | meteo, poi | meteo | original Alpine3D meteo files | |
ALPUG | meteo | data files generated by the ALPUG meteo stations | ||
ARC | dem, landuse, grid2d | grid2d | ESRI/ARC ascii grid files | |
ARGOS | meteo | ARGOS satellite raw files - plugin not functional yet! | ||
ARPS | dem, grid2d, grid3d | ARPS ascii formatted grids | ||
BUFRIO | meteo | BUFR meteo files | ecCodes | |
COSMOXML | meteo | MeteoSwiss COSMO's postprocessing XML format | libxml2 | |
CSV | meteo | flexible reading of CSV files | ||
DBO | meteo | connects to SLF's DBO web service interface | libcurl | |
GEOTOP | meteo | meteo | GeoTop meteo files | |
GOES | meteo | Meteo files transmitted by the GOES satellites | ||
GRASS | dem, landuse, grid2d | grid2d | Grass grid files | |
GRIB | meteo, dem, grid2d | GRIB meteo grid files | ecCodes | |
IMIS | meteo | connects to the IMIS database | Oracle's OCCI library | |
METEOBLUE | meteo | connects to MeteoBlue's web API | libcurl | |
MYSQL | meteo | connects to a MySQL database, various schemas are supported | MySQL's C API | |
NETCDF | meteo, dem, grid2d | meteo, grid2d | NetCDF grids and timeseries | NetCDF-C library |
iCSV | meteo, poi | meteo | iCSV data files | |
OSHD | meteo | OSHD generated binary Matlab files | libmatio | |
PGM | dem, grid2d | grid2d | PGM grid files | |
PMOD | meteo | Raw data files from Pmod/Wrc (experimental!) | ||
PNG | grid2d | PNG grid files | libpng | |
PSQL | meteo | meteo | connects to PostgreSQL database | PostgreSQL's libpq |
SASE | meteo | connects to the SASE database | MySQL's C API | |
SMET | meteo, poi | meteo | SMET data files | |
SNOWPACK | meteo | meteo | original SNOWPACK meteo files | |
SYNTH | meteo | synthetic data generation | ||
ZRXP | meteo | WISKI database input files |
It is possible to use multiple plugins to read meteorological timeseries from multiple sources and combine them into one stream of data. This is achieved by declaring as many [Input#] sections as necessary (where # represent any number, to make sure that not two sections have the same name) and declaring METEO plugins in each of them. Please make sure that all required keys are defined within each new such section (such as TIME_ZONE) because the plugins created this way won't have access to the other [Input] sections. The other plugins (such as for reading grids, dem, etc) will only be read from the standard [Input] section and performed as usual after the data has been provided by the plugins.
If reading the same station from multiple sources (for example providing different time coverage), it might be useful to use the EditingAutoMerge feature to merge all streams belonging to a station into one single stream. In this case, the data coming from [Input] has priority over the various [Input#] data sources.