名称

ST_SquareGrid — 返回一组完全覆盖几何参数边界的网格方块和单元格索引。

概要

setof record ST_SquareGrid(float8 size, geometry bounds);

描述

从平面平铺的概念开始。对于给定的平面 SRS 和给定的边长,从 SRS 的原点开始,平面有一个唯一的正方形平铺,Tiling(SRS, Size)。此函数回答以下问题:给定 Tiling(SRS, Size) 中哪些网格与给定的边界重叠。

输出方块的 SRS 是由边界几何提供的 SRS。

将正方形的边长加倍或减半会生成一个新的父平铺,该平铺与原始平铺完美匹配。墨卡托标准 Web 地图平铺只是墨卡托平面上的二的幂次方的正方形网格。

可用性:3.1.0

示例:为国家/地区生成 1 度网格

网格将填充国家/地区的整个边界,因此如果您只想要与国家/地区相接的方块,则需要使用 ST_Intersects 进行后续过滤。

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

示例:计算方块中的点(使用单个分割网格)

要对正方形平铺进行点汇总,请使用点的范围作为边界生成一个正方形网格,然后进行空间连接到该网格。请注意,估计范围可能与实际范围不同,因此请谨慎操作,至少确保您已分析过您的表。

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

示例:使用每个点的网格集计算方块中的点

这将产生与第一个示例相同的结果,但对于大量点来说速度会更慢。

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

另请参阅

ST_TileEnvelopeST_HexagonGridST_EstimatedExtentST_SetSRID