[postgis-users] Dot Density idea

Martin Davis mbdavis at refractions.net
Thu May 6 10:28:07 PDT 2010

```Good point about the need for even distribution of the points. That
seems like a whole lot harder to code than simply randomly placing
points in a polygon.  Does anyone have any pointers to algorithms for
producing this effect?

George Silva wrote:
> The really big problem with dot density is that dots can overlap themselves,
> masking the real number, so if anything will be developed in this area, the
> points should be
>
> A) evenly distributed
> or
> B) randomly distributed, but with some sort of "colision" tests, so there is
> no or little overlap.
>
> This is a interesting idea, especially if we could make a materialized view
> with those points, which could be added to GIS software for presentation.
>
> George
>
> On Thu, May 6, 2010 at 1:53 PM, Sufficool, Stanley <
> ssufficool at rov.sbcounty.gov> wrote:
>
>
>> 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
>>>>>
>>>
>>>>> 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
>>>
>>>
>> _______________________________________________
>> 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
>

--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022

```