2010-07-27 11 views
5

के अंदर पोस्टगिस यादृच्छिक बिंदु यदि मेरे पास पोस्टगिस में बहुभुज है तो मैं इस बहुभुज के अंदर यादृच्छिक बिंदुओं को कैसे ढूंढ सकता हूं?बहुभुज

+0

इस सवाल http://gis.stackexchange.com/ के लिए चले जा सकती है, कैसे विस्थापित करने के लिए:

अंक के बीच इनपुट करने के लिए "क्षेत्र प्रति अंक के घनत्व" solion, या औसत दूरी का विस्तार? –

उत्तर

5

@ माइक द्वारा उद्धृत लिंक में कोड नहीं है, लेकिन डॉ जेजेटीएस: "डॉट-घनत्व" मानचित्रों से अच्छे संकेत हैं ... "अनिवार्य रूप से इसमें एन यादृच्छिक रूप से रखे गए बिंदुओं का एक सेट बनाना शामिल है जो एक के भीतर स्थित है दिया बहुभुज "। एक समारोह यह करता है: इनपुट बहुभुज है, आउटपुट यादृच्छिक बिंदु।

इन लिंकों में एक ही SQL/PostGIS फ़ंक्शन RandomPoint(Geometry): sorokine 2011 और osgeo.org/postgis/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; 
संबंधित मुद्दे