Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I need some advice with GIS file format choice. Here is my problem: I have about 100 stations. At each station water temperature is measured daily for 1 year I want to load this data to QGIS and be able to quickly display a water temperature map for a user-selected day. I came up with following file structure: A shapefile with lat, lon, time, value columns. For each combination of lat, lon, time there is a new point shape. So for each station I have 365 "overlapping shapes". Then I can use the "query" in QGIS to filter out shapes that have the time attribute equal to the selected day. This is OK for 365 days but becomes little inefficient for several years (shapefile becomes huge and QGIS displays it very slowly)

Is there any other GIS format (like Spatialite or Postgis) that I could use to store the time-space data more efficiently and still be able to visualize it in QGIS without extra programming?

share|improve this question
1  
postgres can control your dates see postgresql.org/docs/8.0/static/functions-datetime.html –  Mapperz Mar 21 '13 at 15:04
    
Besides the obvious way of putting it into Postgres, please consider formats like netCDF that are specifically designed to handle large arrays of an arbitrary number of dimensions. Sure, this will pay off only if the format is going to be used by others. –  Deer Hunter Mar 21 '13 at 19:46
    
Thanks for the netCDF suggestion. I thought that netCDF is for multi-dimensional grid (raster) only. If I have time I will research more on netCDF support in QGIS. –  jirikadlec2 Mar 22 '13 at 8:04
add comment

3 Answers

up vote 10 down vote accepted

Uhm, you can work in PostGIS to give a better structure to the database.

  1. Create a table S (stations) with the following fields:

    • StationID
    • Location (a point that specifies the coordinates)
  2. Create another M (measurements) table with the fields:

    • StationID
    • MeasurementDT (date and time of the measurement)
    • Value (measured value)

Now, you can show all the values in a GIS executing the query:

SELECT S.*, M.MeasurementDT, M.Value
FROM M
LEFT JOIN S
ON M.StationID=S.StationID
WHERE... (query conditions, by time or other parameters)
share|improve this answer
    
Thanks, this works. I did not realize that I could do a JOIN query in "load PostGIS layer" in QGIS. –  jirikadlec2 Mar 22 '13 at 7:59
add comment

Yes, database as PostGIS or SpatialLite would be better choice.

If the points are stationary it is better to create one table with list of measure points, and second table where you enter timecoded measurements and have a foreign key pointing to the measurement point.

share|improve this answer
add comment

You should notice a major speed-up by loading your Shapefile into PostGIS and creating an index on the timestamp.

You can split the data into two tables as suggested by the other answers but then you'll need a view to visualize the data in QGIS via Load PostGIS Layer. (Or use one of the plugins that enable you to load the results of a query as a new layer.)

share|improve this answer
    
Thank you, the solution seems to work. I just created the view and tried Load PostGIS layer in QGIS. And in the list of tables it also shows the view. –  jirikadlec2 Mar 22 '13 at 7:57
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.