[postgis-users] Dot Density idea

Paul Ramsey pramsey at cleverelephant.ca
Thu May 6 10:35:01 PDT 2010

```Even-yet-random :) nice requirement. How about just starting with a
regular grid and then perturbing the elements randomly with a radius
of a cell size? You can use the area of the polygon and number of
needed points to calculate the appropriate cell size and go from
there.

P

On Thu, May 6, 2010 at 10:28 AM, Martin Davis <mbdavis at refractions.net> wrote:
> 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
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>

```