2010-07-27 16 views

Respuesta

5

El enlace citado por @Mike no tiene un código, pero hay buenas pistas de Dr.JTS: mapas de "densidad de puntos" ... "En esencia, esto implica crear un conjunto de N puntos aleatorios que se encuentran dentro de un polígono dado ". Una función hace esto: la entrada es el polígono, la salida los puntos aleatorios.

Estos enlaces tienen la misma función SQL/PostGIS RandomPoint(Geometry): sorokine 2011 y osgeo.org/postgis/wiki. El segundo enlace (wiki) es más completo, explicativo y muestra ejemplos, y una función RandomPointsInPolygon(geometry,integer) que es una respuesta al problema.

La extensión de la solion a la entrada de la "densidad de puntos por zona", o la distancia promedio entre puntos:

CREATE OR REPLACE FUNCTION RandomPointsInPolygon(
    geom geometry,    -- the polygon 
    avg_dist float DEFAULT 20.0, -- average of 20 units between points 
    min_pts integer DEFAULT 1, -- min. of points 
    max_pts integer DEFAULT 1000 -- max. of points 
) RETURNS SETOF geometry AS 
$$ 
    SELECT CASE WHEN npts=1 THEN ST_Centroid($1) 
       ELSE RandomPointsInPolygon($1,npts) 
      END 
    FROM (
    SELECT CASE WHEN d<$3 THEN $3 WHEN d>$4 THEN $4 ELSE d END AS npts 
    FROM (SELECT (st_area($1)/(pi()*($2/2.0)^2))::integer AS d) AS t 
    ) AS t2; 
$$ LANGUAGE SQL; 
Cuestiones relacionadas