[Qgis-user] Labelling expressions: how to select the 'last' row in a csv dataset

Gavin Macaulay gavin at macaulay.co.nz
Tue Mar 11 01:51:15 PDT 2014


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 <gavin at macaulay.co.nz>
> *To:* qgis-user at lists.osgeo.org
> *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
> Qgis-user at lists.osgeo.org <mailto:Qgis-user at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/qgis-user
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20140311/ab9d3d78/attachment.html>


More information about the Qgis-user mailing list