名稱

ST_SquareGrid — 返回一組網格正方形和單元格索引,這些索引完全覆蓋幾何參數的邊界。

概要

setof record ST_SquareGrid(float8 大小, geometry 邊界);

描述

從平面正方形平鋪的概念開始。對於給定的平面SRS和給定的邊長,從SRS的原點開始,平面存在一個唯一的正方形平鋪,Tiling(SRS, Size)。此函數回答以下問題:在給定的Tiling(SRS, Size)中,哪些網格與給定的邊界重疊。

輸出正方形的SRS是邊界幾何提供的SRS。

將正方形的邊長加倍會生成一個新的父平鋪,它與原始平鋪完美契合。墨卡托投影中的標準網路地圖平鋪只是墨卡托平面中二的冪的正方形網格。

可用性: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