Postgis にポリゴンがある場合、ポリゴン内のランダムなポイントを見つけて計算するにはどうすればよいですか?
3779 次
2 に答える
5
@Mike によって引用されたリンクにはコードはありませんが、Dr.JTS からの良い手がかり:「ドット密度」マップ... 関数はこれを行います: 入力はポリゴンで、出力はランダム ポイントです。
これらのリンクには、同じ SQL/PostGIS 関数がありますRandomPoint(Geometry)
: sorokine 2011 およびosgeo.org/postgis/wiki。2 番目のリンク (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;
于 2012-11-24T00:29:47.113 に答える