कुछ समय पहले मैंने एक function
adapted को अनुकूलित किया था हेक्सागोन्स उत्पन्न करने के लिए जो ठीक वही हो सकता है जो आप खोज रहे हैं। यह पैरामीटर सेल की चौड़ाई लेता है, और दक्षिण-पश्चिम और उत्तर-पूर्व कोनों के लिए निर्देशांक लेता है, और एक हेक्सागोनल ग्रिड उत्पन्न करता है।
CREATE OR REPLACE FUNCTION create_hexagons(width FLOAT, xmin FLOAT, ymin FLOAT, xmax FLOAT, ymax FLOAT)
RETURNS TABLE (_gid INTEGER, _geom GEOMETRY) AS $$
DECLARE
b FLOAT := width/2;
a FLOAT := b/2;
c FLOAT := 2*a;
height FLOAT := 2*a+c;
ncol FLOAT := ceil(abs(xmax-xmin)/width);
nrow FLOAT := ceil(abs(ymax-ymin)/height);
polygon_string VARCHAR := 'POLYGON((' ||
0 || ' ' || 0 || ' , ' || b || ' ' || a || ' , ' || b || ' ' || a+c || ' , ' || 0 || ' ' || a+c+a || ' , ' ||
-1*b || ' ' || a+c || ' , ' || -1*b || ' ' || a || ' , ' || 0 || ' ' || 0 || '))';
BEGIN
CREATE TEMPORARY TABLE tmp (gid serial NOT NULL PRIMARY KEY,geom GEOMETRY(POLYGON)) ON COMMIT DROP;
INSERT INTO tmp (geom)
SELECT ST_Translate(geom, x_series*(2*a+c)+xmin, y_series*(2*(c+a))+ymin)
FROM generate_series(0, ncol::INT, 1) AS x_series,
generate_series(0, nrow::INT,1 ) AS y_series,
(SELECT polygon_string::GEOMETRY AS geom
UNION
SELECT ST_Translate(polygon_string::GEOMETRY, b, a + c) AS geom) AS two_hex;
ALTER TABLE tmp ALTER COLUMN geom TYPE GEOMETRY(POLYGON, 4326) USING ST_SetSRID(geom, 4326);
RETURN QUERY (SELECT gid, geom FROM tmp);
END;
$$ LANGUAGE plpgsql;
यह फ़ंक्शन _gid
. कॉलम वाली तालिका लौटाता है और _geom
, जिसमें प्रत्येक षट्भुज के लिए क्रमशः एक पहचानकर्ता और ज्यामिति होती है।
CREATE TABLE t AS
SELECT * FROM create_hexagons(1.0, -180, -90, 180, 45)
इन मापदंडों के साथ, फ़ंक्शन 98192 . के साथ एक ग्रिड उत्पन्न करता है पूरी दुनिया को कवर करने वाले षट्भुज:
यहाँ थोड़ा और करीब है, ताकि आप ग्रिड देख सकें:
यदि आप केवल भूमि को ढकने में रुचि रखते हैं, तो आप ST_Intersects
का उपयोग करके अपनी पसंद की ज्यामिति के आधार पर इन षट्भुजों का एक सबसेट बना सकते हैं। :
CREATE TABLE t_overlap AS
SELECT t._gid,t._geom FROM t,world
WHERE ST_Intersects(world.geom,t._geom)
यह क्वेरी 35911 . वाले ग्रिड के साथ एक सबसेट बनाएगी षट्कोण, जो विश्व मानचित्र से ज्यामिति के साथ प्रतिच्छेद करते हैं:
इस उत्तर में उपयोग किए गए विश्व मानचित्र को here
shape शेपफाइल के रूप में डाउनलोड किया जा सकता है ।
अंतिम उत्पाद:- एक षट्कोणीय ग्रिड में प्रत्येक षट्भुज के लिए केंद्र बिंदु वाली एक तालिका जो पूरी दुनिया को कवर करती है। - षट्भुजों में एक निश्चित क्षेत्र होता है
प्रत्येक षट्भुज के लिए केन्द्रक उत्पन्न करना कोई बड़ी बात नहीं है (देखें ST_Centroid
):
CREATE TABLE t_overlap_centroid AS
SELECT ST_Centroid(_geom) FROM t_overlap;