I did this long ago. Regular points won't work, you'll get all kinds of moire patterns. I just computed random x and y values from the origin of the grid cell within the x- and y grid-size. Can't remember having any problems with overlapping points.

Jan

On 05/06/10 19:35, 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<mbda...@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<
ssuffic...@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-boun...@postgis.refractions.net
[mailto:postgis-users-boun...@postgis.refractions.net] On
Behalf Of Martin Davis
Sent: Thursday, May 06, 2010 8:56 AM
To: John Abraham; postgis-users@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@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@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users


_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users




  ------------------------------------------------------------------------

_______________________________________________
postgis-users mailing list
postgis-users@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@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to