[postgis-users] RE: [Geoserver-users] Time series in postGIS?

Nicolaas Geldenhuys ngeldenhuys at gmail.com
Thu May 10 03:42:43 PDT 2007


Hi Andrea

You could look into using an array of dates as the field type.
I have not worked with geoserver so I am not sure if it will understand 
the array type.

Nicolaas

On Thu, 2007-05-10 at 11:54 +0200, ValiSystem wrote:
> On 9 mai 07, at 15:06, Stephen Crawford wrote:
> 
> > Andrea,
> >
> > Is there a good way to define the view so that the dates, which are  
> > rows in
> > the normal table, become columns in the view, and also that the  
> > view is
> > always updated with the most recent date?
> 
> Stephen,
> 
> There is now way to do such a thing in a pure relational way (read  
> simple sql statements). You could imagine aggregate several rows on a  
> result column, but you cannot  distribute row values of the same  
> columns into several result columns. (this would be a mix of grouping  
> but showing each row values of groups). The problem is that there is  
> now way to differentiate rows in SQL. You are manipulating data sets,  
> not values.
> 
> But you could achieve that using triggers : create a trigger for each  
> date number, and update it on each main table modification. But what  
> ever you do, you will have to fix the number of dates in your history.
> 
> The other way is to concatenate all the dates into one string in your  
> view, creating an aggregate function, and be able to do something like :
> 
> SELECT siteID, concat_rows(date) FROM my_table GROUP BY siteID;
> 
> with concat_rows defined like this :
> 
> CREATE OR REPLACE FUNCTION concat(text, text)
>    RETURNS text AS
> $BODY$
>     select $1 || $2 || ', ';
> $BODY$
>    LANGUAGE 'sql' IMMUTABLE;
> 
> CREATE AGGREGATE concat_rows(
>    BASETYPE=text,
>    SFUNC=concat,
>    STYPE=text
> );
> 
> this will concatenate dates, comma separated. Quickly, you need to  
> define an aggregate function, here 'concat', that will define how to  
> make to different elements a single one (note that you can used a  
> predefined postgres function). Then you declare the aggregate  
> 'concat_rows' in the database.
> 
> The main issue is that you cannot use date formating function after  
> the call in your programming language (i mean, directly on result set  
> access), but note that you can use it inside your query  
> (  "concat_rows(to_char('YYYY-MM-DD', date))" ).
> Also you may not want to have everything concatenated in your final  
> result display, but you may split it later.
> 
> ( http://www.postgresql.org/docs/8.2/static/xaggr.html )
> 
> I hope it'll help, i often wanted to do what you want, but it's  
> incompatible with relational database and SQL axioms (relational  
> algebra).
> 
> > What I hope to have is a feature
> > layer on Geoserver where a GetFeature request will always return  
> > the entire
> > "year to date" without having to use a filter.
> >
> > Thanks Again,
> > Steve
> >
> >
> >
> > -----Original Message-----
> > From: geoserver-users-bounces at lists.sourceforge.net
> > [mailto:geoserver-users-bounces at lists.sourceforge.net] On Behalf Of  
> > Andrea
> > Aime
> > Sent: Tuesday, May 08, 2007 5:00 PM
> > To: Stephen Crawford
> > Cc: geoserver-users at lists.sourceforge.net; 'PostGIS Users Discussion'
> > Subject: Re: [Geoserver-users] Time series in postGIS?
> >
> > Stephen Crawford ha scritto:
> >> All,
> >>
> >> I have a question on setting up a postGIS database for use with
> >> geoserver; please pardon the double-posting but I wasn't sure where I
> > should send it.
> >>
> >> I have created quite a few postGIS/geoserver services already, but I
> >> haven't yet had a "dynamic" one like this.  I have a set of point
> >> locations for which data will be collected daily.  In a "normal"
> >> (non-spatial) database I would just have a table with columns for
> >> siteID,date,value where siteID and date make up the primary key. But
> >> to use with geoserver, it seems like I need to have a row for each
> >> location, where the columns are the date, like
> >> this:
> >> siteID,date_1,date_2,date_3,.......
> >>
> >> What's the best way to do this?  I plan to use a GetFeature WFS
> >> request with geoserver, and would like get all the dates/values back
> >> for each location so my client can "animate" through time.
> >
> > Hum, I would model the database in normal form (as you described in  
> > the
> > first sample) and then build views joining the site and data table,  
> > and
> > register it against the geometry colums so that Geoserver can view  
> > that as a
> > table.
> > Then use a filter to show the situation at a given time. Hope this  
> > helps
> > Cheers Andrea
> >
> > ---------------------------------------------------------------------- 
> > ---
> > This SF.net email is sponsored by DB2 Express Download DB2 Express  
> > C - the
> > FREE version of DB2 express and take control of your XML. No  
> > limits. Just
> > data. Click to get it now.
> > http://sourceforge.net/powerbar/db2/
> > _______________________________________________
> > Geoserver-users mailing list
> > Geoserver-users at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/geoserver-users
> >
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users at postgis.refractions.net
> > http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users




More information about the postgis-users mailing list