PostGIS中ST_HexagonGrid返回record而非geometry类型问题咨询
问题原因
ST_HexagonGrid是PostGIS 3.1及以上版本提供的网格生成集函数,它本身的返回值就是行记录(record)类型,并非直接返回geometry类型。该函数返回的每条记录固定包含3个字段:
geom:生成的六边形面对象,即你需要的geometry类型数据i:六边形在对应网格中的列索引j:六边形在对应网格中的行索引
你当前的写法是直接把函数返回的整条行记录赋值给了hex字段,因此hex的数据类型就是record,和预期不符。
修正方案
你只需要通过括号解引用行记录里的geom字段,就能拿到目标geometry类型数据,修改后的SQL如下:
WITH buffered AS ( SELECT ST_Buffer(geom , 10, 'endcap=round join=round') AS geom, id FROM line), hexagons AS ( SELECT (ST_HexagonGrid(10, buffered.geom)).geom AS hex, buffered.id FROM buffered ) SELECT * FROM hexagons;
- 注意
ST_HexagonGrid调用外层的括号不能省略,否则会触发语法错误 - 如果业务需要用到网格位置索引,也可以用同样方式单独提取
i、j字段使用
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

