[postgis-users] Dot Density idea

Martin Davis mbdavis at refractions.net
Tue Jun 15 16:30:36 PDT 2010

```That's a neat idea alright.

I'm not sure that calling it a "repulsive dots pattern" gets the right
idea across though...   8^)

Francis Markham wrote:
> Looks great Martin.
>
> Another way of generating non-clumpy random dots without a grid-like pattern
> is to use a "repulsive" function.  See for example,
> http://www.statisticsblog.com/2010/06/repulsive-dots-pattern-the-difference-of-distance/
>
> Cheers,
>
> Francis
>
>
>
> On 7 May 2010 08:11, Martin Davis <mbdavis at refractions.net> wrote:
>
>
>> Check out this blog post for some images of different kinds of random point
>> fields:
>>
>>
>> http://lin-ear-th-inking.blogspot.com/2010/05/more-random-points-in-jts.html
>>
>>
>> Martin Davis wrote:
>>
>>
>>> Sounds like it could work - with maybe a bit of fiddling to deal with
>>> cases where the grid cells overlapped the polygon only slightly?
>>> Random perturbation by cell radius can still result in some points being
>>> very close together.  (And I think this would also be an issue where only a
>>> small part of each grid cell overlapped the polygon).  This may or may not
>>> be desirable.  Perhaps a further check could be made to reduce the radius
>>> for points where this occurs.   Or maybe some sort of simulated annealing
>>> process could be use to push the points into a more even distribution.
>>>
>>> M
>>>
>>> Paul Ramsey wrote:
>>>
>>>
>>>> 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
>>>>>
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> 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
>

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

```