PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

दुनिया को कवर करने वाले हेक्सागोनल ग्रिड के निर्देशांक वाली तालिका

कुछ समय पहले मैंने एक 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;




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉलम निर्दिष्ट किए बिना SQL INSERT। क्या होता है?

  2. पोस्टग्रेज:अलग लेकिन केवल एक कॉलम के लिए

  3. एक स्तर से अननेस्ट सरणी

  4. रेल रिपोर्ट को वहां मौजूद कॉलम नहीं मिल रहा है

  5. PostgreSQL में ऑर्डिनल नंबर कैसे बनाएं