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 <[email protected]> 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 < >> [email protected]> 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: [email protected] >>>> [mailto:[email protected]] On >>>> Behalf Of Martin Davis >>>> Sent: Thursday, May 06, 2010 8:56 AM >>>> To: John Abraham; [email protected]; 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 [email protected] >>>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> -- >>>> Martin Davis >>>> Senior Technical Architect >>>> Refractions Research, Inc. >>>> (250) 383-3022 >>>> >>>> _______________________________________________ >>>> postgis-users mailing list >>>> [email protected] >>>> http://postgis.refractions.net/mailman/listinfo/postgis-users >>>> >>>> >>> >>> _______________________________________________ >>> postgis-users mailing list >>> [email protected] >>> http://postgis.refractions.net/mailman/listinfo/postgis-users >>> >>> >> >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> postgis-users mailing list >> [email protected] >> http://postgis.refractions.net/mailman/listinfo/postgis-users >> > > -- > Martin Davis > Senior Technical Architect > Refractions Research, Inc. > (250) 383-3022 > > _______________________________________________ > postgis-users mailing list > [email protected] > http://postgis.refractions.net/mailman/listinfo/postgis-users > _______________________________________________ postgis-users mailing list [email protected] http://postgis.refractions.net/mailman/listinfo/postgis-users
