Salve.
Aggiunto il supporto alle funzioni data e ora in qgis.
Buon divertimento.
---
http://faunalia.it/pc
Sent from mobile, sorry for being short
----- Forwarded message -----
Da: "Nathans QGIS and GIS blog" <donotre...@wordpress.com>
A: <cavall...@faunalia.it>
Oggetto: [New post] Better date and time support in QGIS expressions and styles
Data: sab, giu 30, 2012 14:46
WordPress.com
New post on Nathans QGIS and GIS blog
Better date and time support in QGIS expressions and styles
by Nathan
Version note: This will only work in the latest dev build of QGIS - not in 1.8
The lack of uni for the next couple of weeks has left me some time at night to
work on some features that I really wish QGIS had. One of these features was
better date and time support in the expression engine. Date and time is an
important concept when working on inspection data and not being able to style
my features in QGIS using date operations was bugging me. So in good open
source fashion I added some.
Here are the current functions (more to come in the future):
$now - returns the current date and time
age({datetime},{datetime}) - returns the difference between the two dates
todate({string}) - converts a string to date type
totime({string}) - converts a string to time type
tointerval({string}) - converts a string to a interval type (details below)
day({datetime} or {interval}) - returns the day from a datetime type or the
number of days in a interval.
hour(...) - Same as above but for hours
minute(...) - Same as above but for minutes
second(...) - Same as above but for seconds
day(..) - Same as above but for days
week(..) - Same as above but for weeks
month(...) - Same as above but for months
year(...) - Same as above but for years
{datetime} - {interval} = {new datetime} - returns a new datetime subtracting
the interval
{datetime} + {interval} = {new datetime} - returns a new datetime adding the
interval
The interval type
Functions like age(..), toiterval(), {datetime} -/+ {interval}, day(..),
hour(..), etc, use, or return, Intervals. An Interval is a measure of time
that we can use for different things. An example of an Interval is '1 Year 2
Months' this is then converted to a number of seconds and used for any
calculations.
For example one can take away 10 days from the current date by doing the
following ( -> marks the output ):
todate($now - '10 Days')
-> 2012-06-20
as
todate($now)
-> 2012-06-30
We can also do something like:
todate($now + '2 Years 1 Month 10 Days')
-> 2014-08-10
The age() function will return an interval which we can use extract what
information we need.
The number of days between two dates:
day(age('2012-06-30', '2012-06-10'))
-> 20
-- Think of it as '2012-06-30' - '2012-06-10'
-- Note: day(), month(), etc, functions return doubles so you can get
-- 21.135234 days if you are using date & time type rather than just date type
-- wrap the result in toint() to get a more sane output.
Day() will also work on a plain date:
day('2012-06-30')
-> 30
We can even get the number of seconds between two dates:
second(age('2012-06-30', '2012-06-10'))
-> 1728000
Currently the only date format supported is {year}-{month}-{day} as seen in the
examples above. Shouldn't be too hard to add support to the todate(),
todatetime(), totime() functions for giving it a pattern to use when converting
the string e.g. dd-mm-YYYY, or something like that.
More on this fancy new stuff
When I wrote the new expression builder dialog a while ago I made it dynamic so
that any new functions added to the expression engine will show
up automatically. So here they are:
List of new date and time functions.
We can also use these functions in the rule based rending, which is where the
power really comes in. Lets see something like that in action:
Styled using days and years
Should be pretty straight forward to understand. We are using the age() and
day() functions to style the events that are older than 30 days, within 30
days, for today, or in the future. We also check the year of the event using
year() and year($now) to make sure we only see this years events, or style them
differently depending on if they are last years events or in the future.
This is the result of the above rules:
Result of using date functions in rule based renderer
I'm also using the date functions in the expression based labelling to label
the features using the following expression:
CASE
WHEN year( "dateadded") < year($now) THEN
'Last Year'
WHEN day(age("dateadded", $now)) < 0 THEN
day(age("dateadded", todate($now))) || ' Days old'
ELSE
day(age("dateadded", todate($now))) || ' Days to go'
END
Well that's it. Hope you find it handy in your day-to-day mapping. I know I
will be using it a lot.
Thanks to Martin and Jürgen for the code reviews during the process; venturing
in an unknown part of the code base always makes me nervous but that is all
part of learning, and sometimes you can make some pretty cool stuff.
Some other random notes: The general idea has been modelled of how Postgres
handles dates and times, it's not an exact copy but follows the same kind of
ideas. The interval class also uses the same number of seconds for one year
that postgres does so that we can be consistent with the output.
Nathan | June 30, 2012 at 10:46 pm | Tags: FOSSGIS, gis, map-rendering, Open
Source, osgeo, qgis, Quantum GIS, styling
| Categories: Open Source, qgis
| URL: http://wp.me/pjIwZ-gP
Comment
See all comments
Unsubscribe or change your email settings at Manage Subscriptions.
Trouble clicking? Copy and paste this URL into your browser:
http://woostuff.wordpress.com/2012/06/30/better-date-and-time-support-in-qgis-expressions-and-styles/
Thanks for flying with WordPress.com
_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
599 iscritti al 30.6.2012