【问题标题】:Postgis random point inside a polygon多边形内的Postgis随机点
【发布时间】:2011-03-21 13:16:32
【问题描述】:

如果我在 Postgis 中有一个多边形,我如何找到/计算多边形内的随机点?

【问题讨论】:

标签: random polygon postgis


【解决方案1】:

Postgis 2.3.0 及更高版本有一个新功能可以将点生成到多边形ST_GeneratePoints

【讨论】:

    【解决方案2】:

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

    这些链接具有相同的 SQL/PostGIS 函数 RandomPoint(Geometry)sorokine 2011osgeo.org/postgis/wiki。第二个链接(wiki)更完整,解释和展示了例子,还有一个函数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;
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2018-09-22
      • 2015-03-06
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2016-01-15
      相关资源
      最近更新 更多