Случайная точка Постгиса внутри многоугольника - PullRequest
5 голосов
/ 27 июля 2010

Если у меня есть многоугольник в Postgis, как я могу найти и вычислить случайные точки внутри этого многоугольника?

1 Ответ

5 голосов
/ 24 ноября 2012

Ссылка, на которую ссылается @Mike, не имеет кода, но дает хорошие подсказки от Dr.JTS: карты с "точечной плотностью" ... "По сути, это включает в себя создание набора из N случайно расположенных точек, которые лежат в пределах данного многоугольника».Функция делает это: на входе есть многоугольник, на выходе - случайные точки.

Эти ссылки имеют одинаковую функцию SQL / PostGIS RandomPoint(Geometry): sorokine 2011 и osgeo.орг / PostGIS / вики .Вторая ссылка (вики) является более полной, объясняющей и показывающей примеры, а также функцию RandomPointsInPolygon(geometry,integer), которая является ответом на проблему.

Расширение Solion для ввода «плотности точек на область» или среднегорасстояние между точками:

 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;
...