2010-07-27 35 views

Trả lời

5

Liên kết được trích dẫn bởi @Giống như không có mã, nhưng các đầu mối tốt từ các bản đồ "tỷ lệ chấm mật" của Dr.JTS: "... Điều này liên quan đến việc tạo một tập hợp N điểm ngẫu nhiên nằm trong đa giác nhất định ". Một hàm làm điều này: đầu vào là đa giác, đầu ra các điểm ngẫu nhiên.

Các liên kết này có cùng chức năng SQL/PostGIS RandomPoint(Geometry): sorokine 2011osgeo.org/postgis/wiki. Liên kết thứ hai (wiki) hoàn chỉnh hơn, giải thích và hiển thị các ví dụ, và một hàm RandomPointsInPolygon(geometry,integer) đó là câu trả lời cho vấn đề.

Mở rộng solion nhập "mật độ điểm cho mỗi khu vực", hay khoảng cách trung bình giữa các điểm:

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; 
Các vấn đề liên quan