[postgis-users] selecting a time window
Francois Hugues
hugues.francois at irstea.fr
Mon Jan 14 03:32:26 PST 2013
Hello,
I was answering in a similar way to build lines from your data, but I
wondered about the time window strategy and its origin. Is it :
1. a regular time from the beginning to the end of your data as Nicolas
solution ?
2. a time window for each message : one second before and one second
after message of interest or two second before message of interest or
two second after message of interest ?
In the second case, I think you should use a for loop.
Hugues.
________________________________
From: postgis-users-bounces at lists.osgeo.org
[mailto:postgis-users-bounces at lists.osgeo.org] On Behalf Of Nicolas
Ribot
Sent: Sunday, January 13, 2013 8:12 PM
To: PostGIS Users Discussion
Cc: PostGIS Users Discussion
Subject: Re: [postgis-users] selecting a time window
Hi,
One approach could be to generate 2 seconds intervals from the start
time to the end time and then find records that fall in these intervals.
You could then group values by interval, or generate linestrings based
on the grouped values.
The following example uses CTE to express intermediate tables:
The mgs table has the following structure:
Table < public.msg >
Colonne | Type | Modificateurs
----------+--------------------------+---------------
id | integer | non NULL
utc_time | timestamp with time zone |
lat | double precision |
lon | double precision |
Index :
"msg_pkey" PRIMARY KEY, btree (id)
1) count the total number of messages within a 2 sec time window, for
e.g. msg 1,2,3,4 falls under 2 sec time window,
similarly 5,6,7,8 in next 2 sec.
-- generates time buckets of 2 seconds in the range of available times
with buckets as (
select generate_series(min(utc_time), max(utc_time), interval '2') as t
from msg
)
-- associates times with buckets
, ranges as (
select m.id, m.utc_time, m.lon, m.lat, b.t
from msg m , buckets b
where utc_time >= t and utc_time < (t + interval '2')
order by utc
)
-- counts the number of utc_times in each time range
select count(utc_time), t
from ranges
group by t
;
2) draw a linestring using lat/lon values in that 2 sec i.e line from
msg 1 to msg 4:
Same query as above, except this time points are built from coordinates,
then collected into an array and finally passed to st_makeLine to
generate geometries.
with buckets as (
select generate_series(min(utc_time), max(utc_time), interval '2') as t
from msg
)
-- flags times in the range of 2s from given times
, ranges as (
select m.id, m.utc_time, m.lon, m.lat, b.t
from msg m , buckets b
where utc_time >= t and utc_time < (t + interval '2')
order by utc
) select st_makeLine(array_agg(st_makePoint(lon, lat))) as geom, t
from ranges
group by t;
Nicolas
On 12 January 2013 15:42, tasneem dewaswala <tasneem.europe at gmail.com>
wrote:
Hello,
I have following data with me
Msg UTC_Time Lat Lon
1 133552.25 56.670042 12.862099
2 133552.75 56.6700403333 12.8621025
3 133553.25 56.670037 12.862107
4 133553.5 56.670035 12.8621096667
5 133554.25 56.6700311667 12.8621146667
6 133554.75 56.6700303333 12.8621158333
7 133555.25 56.6700295 12.8621173333
8 133555.75 56.6700286667 12.8621181667
I need to do following operations
1) count the total number of messages within a 2 sec time
window, for e.g. msg 1,2,3,4 falls under 2 sec time window,
similarly 5,6,7,8 in next 2 sec.
2) draw a linestring using lat/lon values in that 2 sec i.e line
from msg 1 to msg 4.
i don't know how can i do this, please give me some suggestions
i am using c# for programming and my postgresql version is
"PostgreSQL 8.4.14, compiled by Visual C++ build 1400, 32-bit"
_______________________________________________
postgis-users mailing list
postgis-users at lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20130114/618164e7/attachment.html>
More information about the postgis-users
mailing list