ST_SquareGrid — Gibt eine Menge von Gitterquadraten und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.
setof record ST_SquareGrid(
float8 size, geometry bounds)
;
Beginnt mit dem Konzept einer quadratischen Kachelung der Ebene. Für eine gegebene planare SRS und eine gegebene Kantengröße gibt es, ausgehend vom Ursprung der SRS, ein einziges quadratisches Tiling der Ebene, Tiling(SRS, Size). Diese Funktion beantwortet die Frage, welche Gitter in einem gegebenen Tiling(SRS, Size) sich mit einer gegebenen Grenze überlappen.
Die SRS für die Ausgangsquadrate ist die SRS, die durch die Begrenzungsgeometrie bereitgestellt wird.
Durch Verdoppelung der Größe des Quadrats oder der Kanten wird eine neue übergeordnete Kachel erzeugt, die perfekt zur ursprünglichen Kachel passt. Standard-Webmap-Kacheln in Mercator sind einfach Zweierpotenzen von quadratischen Gittern in der Mercator-Ebene.
Verfügbarkeit: 2.1.0
Das Raster füllt die gesamten Grenzen des Landes aus. Wenn Sie also nur Quadrate haben wollen, die das Land berühren, müssen Sie anschließend mit ST_Intersects filtern.
WITH grid AS ( SELECT (ST_SquareGrid(1, ST_Transform(geom,4326))).* FROM admin0 WHERE name = 'Canada' ) SELEcT ST_AsText(geom) FROM grid
Um eine Punktzusammenfassung anhand einer quadratischen Kachel zu erstellen, erzeugen Sie ein quadratisches Gitter, das die Ausdehnung der Punkte als Grenzen verwendet, und verbinden Sie es dann räumlich mit diesem Gitter. Beachten Sie, dass die geschätzte Ausdehnung von der tatsächlichen Ausdehnung abweichen kann, seien Sie also vorsichtig und stellen Sie zumindest sicher, dass Sie Ihre Tabelle analysiert haben.
SELECT COUNT(*), squares.geom FROM pointtable AS pts INNER JOIN ST_SquareGrid( 1000, ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857) ) AS squares ON ST_Intersects(pts.geom, squares.geom) GROUP BY squares.geom
Dies führt zum gleichen Ergebnis wie das erste Beispiel, ist aber bei einer großen Anzahl von Punkten langsamer
SELECT COUNT(*), squares.geom FROM pointtable AS pts INNER JOIN ST_SquareGrid( 1000, pts.geom ) AS squares ON ST_Intersects(pts.geom, squares.geom) GROUP BY squares.geom