Visualizing Point Data

David Bitner osgis.lists at GMAIL.COM
Fri Feb 3 13:52:05 EST 2006


Note that the snaptogrid (not sure of spelling or syntax without
looking) in PostGIS could work similarly to the function that you have
created.

On 2/3/06, Bill Binko <bill at binko.net> wrote:
> Hi all,
>
> I'd like to thank everyone for their feedback on this, and remind our
> freinds meeting tomorrow just how valuable this community is in terms of
> responsiveness, accumen, and general ability.  Please make sure this
> community can continue to thrive with the new Foundation in the mix.
>
> That said, I have some clarifying thoughts that I thought I'd post:
>
> 1) Bob Basques has found a link that describes the Kernel Density output
> very closely (thanks, Bob).  Here it is for background:
> http://www.quantdec.com/SYSEN597/GTKAV/section9/density.htm
>
> 2) Several people have mentioned grouping points and counting them, and
> then visualizing by the count.  I have used this technique two different
> ways, and I find use for both of them.
>         a) First, I have created arbitrary grids that split up a dataset
> into blocks and then used the PostGIS Within() method to calculate
> count/sum/max/min/ave numbers for those blocks.
>         b) I have used Census Block Group shapes and performed a similar
> calculation.  (This has the added benefit of being able to do "per capita"
> calculations.)
>
> Both of these maps are useful: the Block Group map even has some "brains"
> behind it since the Block Groups have meaningful boundaries.  However,
> they are very easily skewed.  For example, a single large parcel of may
> take up a large percentage of the block, or points may be clustered very
> close to a corner -- this distributes the points across the blocks and
> dilutes their values.
>
> 3) Sean G suggested that a "poor man's" version of this could be created
> with transparent shapes (which Mapserver doesn't yet support).  That's
> true, to a point.  But there are problems with the approach.  For example,
> unline a true density diagram, only the intensity of the color would
> change: not the radius, so zoomed out views won't see highly dense
> (coincident) areas
>
> I'm not discounting any of these ideas: they all are helping, I just
> thought I'd post back a summary of what I've gotten so far.
>
> Bill
>
> PS: Here is the skeleton of a method in PostGIS that will create a new
> table with a grid that covers the extent of an existing dataset so that
> you can use "WITHIN" to gather averages, etc.
>
> PL/PGSQL to create averages by area on a point set:
>
> DECLARE
>         source_table ALIAS FOR $1;
>         source_col ALIAS for $2;
>         dest_table ALIAS for $3;
>         dest_col ALIAS for $4;
>         num_cols ALIAS for $5;
>         num_rows ALIAS for $6;
>
>         srid integer;
>
>         block_width double precision := 0;
>         block_height double precision  := 0;
>         border box3d;
>         boxString text;
>         result text;
> BEGIN
>
>         srid := select srid from geometry_columns where f_table_name ilike
> source_table and f_geometry_column ilike source_col;
>         EXECUTE 'CREATE TABLE ' || dest_table || ' ( gid serial )';
>         EXECUTE 'AddGeometryColumn('''||
>                   dest_table||''','''||
>                   dest_col||''',srid, ''POLYGON'',2)';
>
>         border := box3d(extent(target_shape)) from target_table;
>         block_width := (xmax(border) - xmin(border)) / num_cols;
>         block_height := (ymax(border) - ymin(border))/ num_rows;
>         boxString := 'BOX3D(''BOX3D(0 0 0, ' || block_width || ' ' ||
> block_height || ' 0)'')';
>         result := EXECUTE 'insert into  ' || dest_table || '( ' ||
> dest_col || ') values ( '||  boxString ' ) ';
>         return done;
>
> end;
>



More information about the mapserver-users mailing list