Postgis随机点在多边形内

时间:2010-07-27 11:06:25

标签: random polygon postgis

如果我在Postgis中有多边形,我怎么能找到 - 计算这个多边形内的随机点?

2 个答案:

答案 0 :(得分:5)

@Mike引用的链接没有代码,但来自Dr.JTS的好线索: “点密度”地图......“基本上这涉及创建一组N个随机放置的点,它们位于给定的多边形内”。函数执行此操作:输入是多边形,输出是随机点。

这些链接具有相同的SQL / PostGIS功能RandomPoint(Geometry)sorokine 2011osgeo.org/postgis/wiki。第二个链接(wiki)更完整,解释和显示示例,以及函数RandomPointsInPolygon(geometry,integer),它是问题的答案。

将骰子扩展为输入“每个区域的点密度”或点之间的平均距离:

 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;

答案 1 :(得分:0)

Postgis 2.3.0及更高版本具有新功能,可以将点生成到多边形ST_GeneratePoints中。