= GSoC 2017 SOS tools in GRASS GIS = || Title: || '''SOS tools in GRASS GIS''' || ||Student Name: || Ondrej Pesek, [http://www.cvut.cz Czech Technical University in Prague] || ||Organization: || [http://www.osgeo.org OSGeo - Open Source Geospatial Foundation] || || Mentor Name: || [https://wiki.osgeo.org/wiki/User:Lucadelu Luca Delucchi], Matteo De Stefano || || GSoC proposal: || [https://storage.googleapis.com/summerofcode-prod.appspot.com/gsoc/core_project/doc/5943871440683008_1491200698_pesek_ondrej_sos_tools_proposal.pdf?Expires=1494492722&GoogleAccessId=summerofcode-prod%40appspot.gserviceaccount.com&Signature=qzSNs3AO0fv01ufSD8wGAk7H6PdCtUr93wyfCT8mgP29CMh25H5m2odoJVqMufnTQhFOPhe1neFFpASWgoOJg6kHFky5MSRX30nlnIZVmWjlrnXykNUvyc5wm%2BjumiMfDPGwT7MkEr%2FCx1ZLo0pv3KJD16oPQ2VcJRBNQGIReKxXlI%2BkaszEDGvIrtd6HFm288gRkL6GTFYzWwb0y0cgbvcYNYggu1nKmbqgL2qIlDQZW8OXD7QShwhVrhD8G6zBUWdcnaEPK9zJ2eX%2BdLsytj6rYSeG7uz%2F22r9VJ7QFs%2BCbXSVt08y8ltWamXL2HW5di722jEgQ3eR%2BDkRLjxH4w%3D%3D view proposal] || || Repositories: || Github for development: || https://github.com/pesekon2/GRASS-GIS-SOS-tools || || || GRASS SVN !AddOns for final modules: || https://svn.osgeo.org/grass/grass-addons/grass7/ || || || OWSlib fork with SOS patches: || https://github.com/pesekon2/OWSLib || || || istSOS fork with some patches: || https://github.com/pesekon2/istsos2 || == Abstract == GRASS GIS doesn’t have any module to work with Sensor Observation Service (SOS). SOS is an Open Geospatial Consortium (OGC) standard and it is useful to implement modules to work with this standard into GRASS. == Goal == Intended modules would enable the user to create a vector with or without the observation values, create a raster for each queried day and create a space time vector or raster dataset. One module would also allow the user to convert a space time vector dataset into a raster dataset. The user should be also allowed to get the capabilities to get info about sensors from these modules and filter the results. Intended modules would also use OWSLib to work with the server and data. There are a few things to improve in OWSLib, so this should be the first part of my GSoC project. I would also like to use pyGrass (a python library allowing users to access the low-level GRASS API) to create new modules. == Timeline == |||| ||status|| ||Community bounding period || Studying OWSLib and SOS || * || ||'''Let the summer begin''' || || || ||MAY 30 - JUNE 2 || Testing OWSLib functionalities on different SOS servers || * || ||JUNE 5 - JUNE 9 || Improving OWSLib functionalities || * || ||JUNE 12 - 16 || Improving OWSLib, developing background for forthcoming modules || * || ||JUNE 19 - 23 || v.in.sos (creating a vector with or without the observation values) || * || ||JUNE 26 - 30 || v.in.sos upgrades, t.vect.in.sos shuck || * || ||'''First evaluations''' || || || ||JULY 3 - 14 || I am sorry but I will have no access to internet and neither to electricity due to my work at summer camp || * || ||JULY 17 - 21 || t.vect.in.sos (creating a space time vector dataset) || * || ||JULY 24 - 28 || r.in.sos (creating a raster for each queried day) || * || ||'''Second evaluations''' || ||JULY 31 - AUGUST 4 || t.rast.in.sos (creating a space time raster dataset) || * || ||AUGUST 7 - 11 || t.vect.to.rast (convert space time vector dataset into space time raster dataset) || * || ||AUGUST 14 - 18 || Writing documentation, buffer in case of delay || || ||AUGUST 21 - 29 || Submitting the final work product || || ||'''Final evaluations''' || == Requirements == [http://grass.osgeo.org/download/software/#g73x GRASS 7.3] == Development == === Weekly reports === ==== May 30 - June 2 ==== Studied OWSLib and its work with SOS (especially with istSOS) and in which formats are available in response. Solved [https://github.com/geopython/OWSLib/issues/347 this issue] in OWSLib. Created converter between normal JSON output from OWSLib and geoJSON for points ==== June 5 - June 9 ==== I had a problem with xml parser in OWSLib for SOS observations, because it works completely different way than we expected. After few conversations I have decided to work with raw output and write parser by myself. Created pull request solving [https://github.com/geopython/OWSLib/issues/248 encoding issue] for OWSLib. Created converter between text/xml;subtype="om/1.0.0" output from OWSLib and geoJSON for points Created a shuck of v.in.sos module ==== June 12 - June 16 ==== Created v.in.sos * Makefile and first html * UI * Prints informations about sensor offerings * Imports the observation into GRASS GIS * This version is returning just the last observation ==== June 19 - June 23 ==== v.in.sos * flags for printing timestamps of begin and end of observation * working with event_time (interval of observation is used in query) * v.in.sos returns one map with many layers (layers count = observed properties count) xml2geojson * working with separated blocks of values, not just with single values ==== June 26 - June 30 ==== v.in.sos * using vectors in pyGRASS instead of v.in.sos * support multiple offerings * layers are for offerings and observed properties, rows are for one feature * handle data input with no observations for * handle too big input with warnings and errors t.vect.in.sos * first version (just draft with some bugs, they are saved as issues and will be solved after my return) ==== July 3 - July 7 ==== I was out of internet and electricity during the last week. So I wasn't able to do anything connected with GSoC. ==== July 10 - July 14 ==== I was out of internet and electricity during the last week. So I wasn't able to do anything connected with GSoC. ==== July 17 - July 21 ==== Visited FOSS4G-E Implemented shell script style output into modules t.vect.in.sos * new vector for each offering and observed property r.in.sos * first version ==== July 24 - July 28 ==== All modules * Shell script style update * Handle import errors * Flags working with multiple offerings * Not given options are generated just temporarily xml2geojson * Observed properties can be given as their ids t.vect.in.sos * Creating stvds r.in.sos * Creating raster maps ==== July 31 - August 4 ==== r.in.sos * flag for deleting vector maps created as intermediates * importing vectors and values in one step v.in.sos * importing vectors and values in one step All modules * not stop when using just -g flag * code cleaning * manuals updates A little pull request for istSOS * allow user to define offering in csv2istsos ==== August 7 - August 11 ==== v.in.sos * finally working the desired way even with more layers * uses yet existing columns for timestamps instead of creating new ones t.vect.in.sos * finally working with layers-based vectors t.rast.in.sos ==== August 14 - August 18 ==== all modules * made quiet, e.g. when creating temporal dataset with hundreds of maps, it doesn't show hundreds of builds * worked on documentation t.vect.in.sos * uses yet existing timestamped layers instead of creating new ones t.vect.to.rast * created r.in.sos * updating yet existing maps instead of creating new ones * option for granularity and aggregations === Final Report === **Project Title:** SOS tools in GRASS GIS **Organization:** Google Summer of Code 2017 Open Source Geospatial Foundation (OSGeo) GRASS GIS **Abstract:** Intended modules would enable the user to create a vector, a raster based on some aggregations and create a space time vector or raster dataset, everything directly from user's access to the SOS server. t.vect.to.rast would also allow the user to convert a space time vector dataset into a raster dataset. The user should be also allowed to get the capabilities to get info about sensors from these modules and filter the results. **Pre-GSoC:** GRASS GIS didn't have any module to work with Sensor Observation Service (SOS). When the user wanted to use data from his SOS server, he had to access them through OWSLib, convert them into GRASS GIS or OGR supported format ad then import it somehow to GRASS GIS as one huge file. **Added value:** v.in.sos imports data from SOS server as a vector map to GRASS GIS. It creates one layer for each offering and observed property. r.in.sos imports data from SOS server as a raster maps to GRASS GIS. It creates new raster map for each timestamp. t.vect.in.sos imports data from SOS server to GRASS GIS as a spatio-temporal vector dataset. It creates new stvds for each offering and observed property (created from one vector map as an intermediate). t.rast.in.sos imports data from SOS server to GRASS GIS as a spatio-temporal raster dataset. It creates new strds for each property and each procedure (registered from raster maps created as intermediates). t.vect.to.rast doesn't import data from SOS server to GRASS GIS. It converts a space time vector dataset into a space time raster dataset. User is allowed to use some aggregations and granularity to filter data in all modules. **Continued Work:** There are some issues or possible enhancements in the modules. v.in.sos uses timestamps as column names for each layer. The problem is that it is not possible to have more than 3000 columns in SQLite table (GRASS GIS attribute table) without SQLite recompilation. It is little bit solved by granularity and this module isn't so necessary when there is t.vect.in.sos, but it is still useful for some purposes and this is really lack. t.vect.to.rast is working, but if you take a look at t.rast.to.vect, you can see much more options. It would be great to involve them also into this module. It would be also great to have a flag for ignoring empty procedures in all the SOS modules. **Link:** The modules github repository: [https://github.com/pesekon2/GRASS-GIS-SOS-tools (they should be moved into the official GRASS GIS add-ons repository in the future) One image to show how can visualized sensors look on the OSM map: https://raw.githubusercontent.com/pesekon2/GRASS-GIS-SOS-tools/d566c868a50f12ba6fc4e1d6b953e9708e4b0061/image_vector_import.png **What do you need to test these !AddOns?** To use this module, you need your OWSLib up-to-date. If you don't have it, please install it from its [https://github.com/geopython/OWSLib github repository]. Because of granularity options, you need to be using GRASS > 7.2 to have access to some functions.