如果我在 Postgis 中有一个多边形,我如何找到/计算多边形内的随机点?
问问题
3779 次
2 回答
5
@Mike 引用的链接没有代码,但来自 Dr.JTS 的好线索:“点密度”地图......“基本上这涉及创建一组位于给定多边形内的 N 个随机放置的点”。一个函数可以做到这一点:输入是多边形,输出是随机点。
这些链接具有相同的 SQL/PostGIS 功能RandomPoint(Geometry)
:sorokine 2011 和osgeo.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;
于 2012-11-24T00:29:47.113 回答
3
Postgis 2.3.0 及更高版本有一个新函数可以将点生成到多边形ST_GeneratePoints中。
于 2020-12-02T12:03:56.133 回答