ST_HexagonGrid — Gibt eine Menge von Sechsecken und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.
setof record ST_HexagonGrid(
float8 size, geometry bounds)
;
Beginnt mit dem Konzept einer Sechseckkachelung der Ebene. (Es handelt sich nicht um eine hexagonale Kachelung der Erdkugel, sondern um das H3 Kachelungsschema.) Für eine gegebene planare SRS und eine gegebene Kantengröße gibt es, ausgehend vom Ursprung der SRS, eine einzige hexagonale Kachelung der Ebene, Tiling(SRS, Size). Diese Funktion beantwortet die Frage, welche Sechsecke in einem gegebenen Tiling(SRS, Size) sich mit einer gegebenen Grenze überschneiden.
Die SRS für die Ausgangssechsecke ist die SRS, die durch die Begrenzungsgeometrie bereitgestellt wird.
Durch Verdoppelung oder Verdreifachung der Kantengröße des Sechsecks wird eine neue übergeordnete Kachel erzeugt, die zur ursprünglichen Kachel passt. Leider ist es nicht möglich, übergeordnete Sechseckkacheln zu erzeugen, in die die untergeordneten Kacheln perfekt hineinpassen.
Verfügbarkeit: 2.1.0
Um eine Punktzusammenfassung anhand eines sechseckigen Kachels vorzunehmen, erstellen Sie ein Sechseckgitter, wobei Sie die Ausdehnung der Punkte als Grenzen verwenden, und verbinden Sie es dann räumlich mit diesem Gitter.
SELECT COUNT(*), hexes.geom FROM ST_HexagonGrid( 10000, ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857) ) AS hexes INNER JOIN pointtable AS pts ON ST_Intersects(pts.geom, hexes.geom) GROUP BY hexes.geom;
Wenn wir für jede Polygongrenze eine Reihe von Sechsecken erzeugen und diejenigen herausfiltern, die sich nicht mit ihren Sechsecken schneiden, erhalten wir ein Tiling für jedes Polygon.
Die Kachelung von Zuständen führt dazu, dass jeder Zustand von einem Sechseck abgedeckt wird und sich mehrere Sechsecke an den Grenzen zwischen den Zuständen überlappen.
Das Schlüsselwort LATERAL wird für Funktionen mit Mengenrückgabe impliziert, wenn auf eine vorherige Tabelle in der FROM-Liste verwiesen wird. CROSS JOIN LATERAL, CROSS JOIN oder einfach nur , sind also gleichwertige Konstrukte für dieses Beispiel. |
SELECT admin1.gid, hex.geom FROM admin1 CROSS JOIN ST_HexagonGrid(100000, admin1.geom) AS hex WHERE adm0_a3 = 'USA' AND ST_Intersects(admin1.geom, hex.geom)