ST_SquareGrid
Prev | 8.3. Geometry Constructors | Next

## 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

## See Also

ST_TileEnvelope, ST_HexagonGrid , ST_EstimatedExtent , ST_SetSRID

Prev | Up | Next
ST_Hexagon | Home | ST_Square