## Name

ST_SquareGrid — Returns a set of grid squares and cell indices that completely cover the bounds of the geometry argument.

## Synopsis

`setof record `**ST_SquareGrid**(

float8 `size`, geometry `bounds``)`

;

## Description

Starts with the concept of a square tiling of the plane.
For a given planar SRS, and a given edge size, starting at the origin of the SRS,
there is one unique square tiling of the plane, Tiling(SRS, Size).
This function answers the question: what grids in a given Tiling(SRS, Size)
overlap with a given bounds.

The SRS for the output squares is the SRS provided by the bounds geometry.

Doubling or edge size of the square generates a new parent tiling that
perfectly fits with the original tiling. Standard web map tilings in mercator
are just powers-of-two square grids in the mercator plane.

Availability: 3.1.0

## Example: Generating a 1 degree grid for a country

The grid will fill the whole bounds of the country, so if you want just squares
that touch the country you will have to filter afterwards with ST_Intersects.

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

## Example: Counting points in squares (using single chopped grid)

To do a point summary against a square tiling, generate a square grid using the
extent of the points as the bounds, then spatially join to that grid. Note the estimated extent might be off from actual extent, so be cautious and at very least make sure you've analyzed your table.

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

## Example: Counting points in squares using set of grid per point

This yields the same result as the first example but will be slower for a large number of points

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