Brent,

I was so focussed on trying to use labelling that I didn't think of other options, such as you suggested:) The two files method does the job, and matches the hacky way that the original file generated...

I see some discussion of adding aggregate functions on top of QgsExpression [1], which as I understand it, would make such functions available for use in the labelling dialog. I could then do something elegant like datetime = max(datetime) to select the most recent datapoint...

Regards

Gavin

[1] Towards the end of: https://groups.google.com/forum/#!topic/qgis-developer-remote/3pWsSyYSd9s

On 11/03/2014 5:35 a.m., Brent Wood wrote:
Hi Gavin,

Can you have the row written to two files concurrently? One as an append & one overwrite. Both watched in QGIS & have the overwrite as the upper layer on the map with a different symbol, thus overwriting the trackline point in the append csv file.

Not as elegant as an SQL solution, but csv's are not really reknowned for their elegance in data management :-)


I haven't really thought this through, but you might try using a named pipe (see mkfifo on Linux, Windows has something along these lines too), & run "tail -n 1 -f myfile.csv" into the named pipe, then open this in QGIS. This is such a horrible solution it's almost certain not to work, but you never know :-)


Cheers,

   Brent
------------------------------------------------------------------------
*From:* Gavin Macaulay <[email protected]>
*To:* [email protected]
*Sent:* Tuesday, March 11, 2014 9:18 AM
*Subject:* [Qgis-user] Labelling expressions: how to select the 'last' row in a csv dataset

Hi,

I have a csv file that looks like this:

datetime, latitude, longitude, speed
2014-03-07T06:11:56.794000, 69.6930, 19.0321, 0.0
2014-03-07T06:12:56.791000, 69.6904, 19.0291, 10.0
2014-03-07T06:13:56.787000, 69.6879, 19.0257, 10.0

A new row gets added to the file every second or so. I load this file
into QGIS as a csv file with the watch option turned on so that every
time the map is refreshed, the map plots any new points that have been
added to the file.

I would like to have the most recent line in the file plotted with a
different symbol to the rest (the data represents realtime data from a
moving ship so it's good to highlight the latest position). I can almost
do this using the expression based labelling, but not quite (I can get a
row number, but not the total number of rows, so can't do something
obvious like: $rownum == $numrows, or $id == max($id)).

Any suggestions on how I can achieve this? I could move the data into a
SQL-based layer and choose the last row using an SQL statement, but the
simplicity of generating the csv files is attractive.

Thanks

Gavin
_______________________________________________
Qgis-user mailing list
[email protected] <mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/qgis-user



_______________________________________________
Qgis-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to