Name

ST_SquareGrid — Gibt eine Menge von Gitterquadraten und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.

Übersicht

setof record ST_SquareGrid(float8 size, geometry bounds);

Beschreibung

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

Beispiele

Generating a 1 degree grid for a country.

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.

Code
WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom, 4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT geom
  FROM grid

Counting points in squares (using single chopped 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.

Code
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;

Counting points in squares using set of grid per point.

Dies führt zum gleichen Ergebnis wie das erste Beispiel, ist aber bei einer großen Anzahl von Punkten langsamer

Code
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;