ST_HexagonGrid — 返回一组六边形和单元格索引,这些六边形完全覆盖几何参数的边界。
setof record ST_HexagonGrid(
float8 size, geometry bounds)
;
从平面六边形平铺的概念开始。(不是地球的六边形平铺,这不是 H3 平铺方案。)对于给定的平面 SRS 和给定的边长,从 SRS 的原点开始,存在一个唯一的平面六边形平铺,即 Tiling(SRS, Size)。此函数回答的问题是:给定 Tiling(SRS, Size) 中哪些六边形与给定的边界重叠。
输出六边形的 SRS 是由边界几何图形提供的 SRS。
将六边形的边长加倍或三倍会生成一个新的父平铺,该平铺与原始平铺相匹配。不幸的是,无法生成子图块完美地适合其中的父六边形平铺。
可用性:3.1.0
要针对六边形平铺执行点汇总,请使用点的范围作为边界生成六边形网格,然后空间连接到该网格。
SELECT COUNT(*), hexes.geom FROM ST_HexagonGrid( 10000, ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857) ) AS hexes INNER JOIN pointtable AS pts ON ST_Intersects(pts.geom, hexes.geom) GROUP BY hexes.geom;
如果我们为每个多边形边界生成一组六边形,并过滤掉那些不与其六边形相交的六边形,我们最终会得到每个多边形的平铺。
平铺状态会导致每个状态的六边形覆盖,以及在状态边界之间重叠的多个六边形。
当在 FROM 列表中引用先前的表时,对于返回集合的函数,隐含了 LATERAL 关键字。因此,对于此示例,CROSS JOIN LATERAL、CROSS JOIN 或仅是普通的“,”是等效的构造。 |
SELECT admin1.gid, hex.geom FROM admin1 CROSS JOIN ST_HexagonGrid(100000, admin1.geom) AS hex WHERE adm0_a3 = 'USA' AND ST_Intersects(admin1.geom, hex.geom)