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