[postgis-users] Dot Density idea

Sufficool, Stanley ssufficool at rov.sbcounty.gov
Thu May 6 09:53:35 PDT 2010


Looks nasty, but it might work:

select
st_line_interpolate_point(
        st_intersection(
                the_geom,
                st_makeline(
                        st_pointn(st_exteriorring(the_geom), (rand1.rand * st_npoints(st_exteriorring(the_geom)))::int),
                        st_pointn(st_exteriorring(the_geom), (rand2.rand * st_npoints(st_exteriorring(the_geom)))::int)
                )
        )
        ,rand3.rand
)
from insert_your_table_name_here,
(select random() as rand, generate_series(1,1000) as point_number) as rand1
JOIN (select random() as rand, generate_series(1,1000) as point_number) as rand2
        ON rand1.point_number = rand2.point_number
JOIN (select random() as rand, generate_series(1,1000) as point_number) as rand3
        ON rand2.point_number = rand3.point_number
WHERE st_geometrytype(
        st_intersection(
                the_geom,
                st_makeline(
                        st_pointn(st_exteriorring(the_geom), (rand1.rand * st_npoints(st_exteriorring(the_geom)))::int),
                        st_pointn(st_exteriorring(the_geom), (rand2.rand * st_npoints(st_exteriorring(the_geom)))::int)
                )
        )
) = 'ST_LineString'
AND oid = 5030 /* Enter your own OID here */
limit 100



>-----Original Message-----
>From: postgis-users-bounces at postgis.refractions.net
>[mailto:postgis-users-bounces at postgis.refractions.net] On
>Behalf Of Martin Davis
>Sent: Thursday, May 06, 2010 8:56 AM
>To: John Abraham; postgis-users at postgis.refractions.net; Martin Davis
>Subject: Re: [postgis-users] Dot Density idea
>
>
>I was thinking the same thing!
>
>strk wrote:
>> ST_RandomPoinsOnSurface(geometry, numpoints) would be an interesting
>> function indeed. Sounds like a good job for GEOS/JTS.
>>
>> --strk;
>>
>> On Mon, May 03, 2010 at 10:49:32PM -0600, John Abraham wrote:
>>
>>> One of the things I miss about using ESRI's GIS is the
>ability to do
>>> dot-density maps.  Within a polygon, the number of dots is
>proportional to a value, and the dots are randomly placed.  I
>find it useful to be able to present several data values at
>once (e.g. blue dots for population, red dots for employment).
>>>
>>> I also find that it is a more intuitive way of scaling for
>zone size
>>> than dividing the value by the area of the zone.  That is,
>the count
>>> of the dots represents the actual number, but the density
>of the dots
>>> represents the density of the number.  So I don't have to decide
>>> whether to divide the value by the area of the polygon to plot
>>> density: both the absolute number and the density are
>easily visible.
>>>
>>> Since my open-source GIS viewing systems (mostly QGIS and
>Mapserver)
>>> won't plot dot-density, I've done without.
>>>
>>> But today I realized that I can build these on the server
>instead.  I
>>> can generate random points within the bounding-box of the polygon,
>>> throwing out those that aren't contained within the polygon,
>>> repeating until I have enough.  Then I can save these points as a
>>> separate layer, and display this layer using almost any desktop or
>>> web based viewer!
>>>
>>> Has anyone done this?  Can I do it in SQL or do I need to write
>>> something in PL/pgsql?
>>>
>>> --
>>> John Abraham
>>>
>>> PS I just bought the Postgis In Action book; enjoying it so far.
>>> _______________________________________________
>>> postgis-users mailing list postgis-users at postgis.refractions.net
>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>
>>
>>
>
>--
>Martin Davis
>Senior Technical Architect
>Refractions Research, Inc.
>(250) 383-3022
>
>_______________________________________________
>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