[mapserver-users] An interesting SQL linestring building problem from postgres.

Worth Lutz wal3 at mindspring.com
Tue Dec 2 14:00:08 PST 2014


I've done something similar.

I don't have it in front of me at the moment but a postgres select can 
do this.

Look in Postgres for "window"  and "row_number".

You use the postgres "OVER" clause to group the items and then 
row_number to get a key for color.

SELECT
     a,
     b,
     c,
     row_number() OVER (PARTITION BY d) AS color_key
FROM table

The partition is your grouping of three.  row_number would be your 
color_key.  Use a modulus to limit the number of colors.

here is a link which might get you started
http://www.codeproject.com/articles/308281/How-to-Use-ROW-NUMBER-to-Enumerate-and-Partition-R

Note the final SQL statement which shows multiple items inside the 
"OVER" clause.

I hope this helps point you in the right direction.

If I can find a second, I'll look at your problem a little harder.

*Worth Lutz*
------------------

On 12/02/2014 02:56 PM, Basques, Bob (CI-StPaul) wrote:
>
> All,
>
> I have a bunch of individual LINE segments in Postgres and want to 
> display them via MapServer like so:
>
> First:
>
> ·Get a chunk of them based on a set of IDs (a set of three for 
> example)  and a begin/end timestamp (got this figured out already)
>
> ·Take the result and combine up the separate line strings into 
> multi-segment (grouped) lines ordered by ID, timestamp (got this 
> figured out for individual IDs)
>
> ·Add a random number to each grouping of multi-line string rows for 
> dynamic color-coding of each group. (got this figured out for 
> individual IDs)
>
> ·Have results output as three rows, one for each multi-segment line.
>
> I’m lost on the method to do the last piece. Mostly it relates about 
> how to approach which piece first. Seems like a straightforward SQL, 
> but I’ve tried a few different things, and it falls part each time for me.
>
> Anyone have examples of something like this to start from?
>
> The pertinent Mapfile fragment, I know this only color codes each 
> individual segment at the moment.  VEH_IDs are passed into the MapFile 
> from CGI (vname=veh_id in DB):
>
> DATA "the_line FROM (select the_line, vname, acqtime, trunc(random() * 
> 4 + 1) rnum from loc) as foo USING unique vname using SRID=4326"
>
>                 FILTER " vname in (%veh_id%) AND acqtime > 
> '%time_idx1%' AND acqtime <'%time_idx2%' "
>
>                 VALIDATION
>                         'time_idx1' '.*'
>                         'time_idx2' '.*'
>                         'veh_id' '.*'     ## veh_id=’100’,’200’,’300’ 
> . . .
>                 END
>
>                 CLASSITEM "rnum"
>
>                 CLASS ## Use the RNUM value to color code the line 
> strings randomly.
>                         STYLE
>                                 COLOR 255 0 0
>                                 WIDTH 5
>                         END
>                         EXPRESSION '1'
>                 END
>                 CLASS
>                         STYLE
>                                 COLOR 0 255 0
>                                 WIDTH 5
>                         END
>                         EXPRESSION '2'
>                 END
>                 CLASS
>                         STYLE
>                                 COLOR 0 0 255
>                                 WIDTH 5
>                         END
>                         EXPRESSION '3'
>                 END
>                 CLASS
>                         STYLE
>                                 COLOR 255 255 0
>                                 WIDTH 5
>                         END
>                         EXPRESSION '4'
>                 END
>                 CLASS
>                         NAME "Segments"
>                         STYLE
>                                 COLOR 0 255 0
>                                 WIDTH 5
>                         END
>                 END
>
> Thanks
>
> Bobb
>
>
>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20141202/b64dac03/attachment.htm>


More information about the MapServer-users mailing list