2010-07-27 10 views

cevap

5

@Mike tarafından atıf yapılan linkte bir kod yoktur, ancak iyi ipuçları Dr.JTS: "dot-density" maps ... "Aslında bu, içinde bir rastgele yerleştirilmiş N seti oluşturmayı içerir. çokgen verilen ". Bir fonksiyon bunu yapar: giriş poligon, çıkış rasgele puantır.

Bu bağlantılar SQL/PostGIS işlevi RandomPoint(Geometry): sorokine 2011 ve osgeo.org/postgis/wiki ile aynıdır. İkinci bağlantı (wiki) daha eksiksiz, açıklayıcı ve gösterme örnekleri ve sorunun cevabı olan bir RandomPointsInPolygon(geometry,integer) işlevidir. Bu soru Nasıl göçe http://gis.stackexchange.com/ geçirilebilir

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;