Name

ST_SquareGrid — Returnerar en uppsättning rutnätsrutor och cellindex som helt täcker gränserna för geometriargumentet.

Synopsis

setof record ST_SquareGrid(float8 size, geometry bounds);

Beskrivning

Börjar med konceptet av en kvadratisk tiling av planet. För en given plan SRS och en given kantstorlek, med början vid SRS:ens ursprung, finns det en unik kvadratisk tiling av planet, Tiling(SRS, Size). Denna funktion svarar på frågan: vilka rutnät i en given Tiling(SRS, Size) överlappar med en given gräns.

SRS för utdatarutorna är den SRS som tillhandahålls av avgränsningsgeometrin.

Dubblering eller kantstorlek av kvadraten genererar en ny överordnad tiling som passar perfekt med den ursprungliga tilingen. Vanliga webbkartor i mercator är bara tvåpotenser av två kvadratiska rutnät i mercatorplanet.

Tillgänglighet: 3.1.0

Exempel: Generering av ett 1 graders rutnät för ett land

Rutnätet kommer att fylla hela landets gränser, så om du bara vill ha rutor som berör landet måste du filtrera efteråt med ST_Intersects.

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

Exempel: Räkna punkter i rutor (med enstaka hackat rutnät)

För att göra en punktsammanfattning mot en kvadratisk platta, generera ett kvadratiskt rutnät med hjälp av punkternas utsträckning som gränser och sedan spatialt ansluta till det rutnätet. Observera att den beräknade omfattningen kan skilja sig från den faktiska omfattningen, så var försiktig och se åtminstone till att du har analyserat din tabell.

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

Exempel: Räkna punkter i kvadrater med hjälp av en uppsättning rutnät per punkt

Detta ger samma resultat som i det första exemplet, men blir långsammare för ett stort antal punkter

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