我有一个查询,它在点层周围 50 米的圆圈(缓冲区)中生成 12 个部分(饼状楔形)。
With buffer as(
SELECT gid as pt_id, (ST_DumpPoints(ST_Buffer(geom,50,3))).geom as geom
FROM my_point_table group by gid, geom
UNION ALL
SELECT gid as pt_id, geom FROM my_point_table
)
SELECT gid, (ST_Dump(ST_DelaunayTriangles(ST_Collect(geom),0, 0))).geom geom
FROM buffer
GROUP BY pt_id
我想为这些部分分配 ID,如下所示:
我们将非常感谢有关如何执行此操作的建议。
最佳答案
你可以尝试这样的事情
With my_point_table as (
select 1 as gid, 'POINT(0 0)'::geometry as geom
union
select 2 as gid, 'POINT(1 1)'::geometry as geom
), buffer as(
SELECT gid as pt_id, (ST_DumpPoints(ST_Buffer(geom,50,3))).geom as geom
FROM my_point_table group by gid, geom
UNION ALL
SELECT gid as pt_id, geom FROM my_point_table
) , tr as (
SELECT pt_id, (ST_Dump(ST_DelaunayTriangles(ST_Collect(geom),0, 0))).geom geom
FROM buffer
GROUP BY pt_id
)
select row_number() OVER (partition by pt_id), pt_id, geom from tr
第一部分是模拟您的“my_point_table”表。
row_number() OVER(按 pt_id 分区) 是为每个功能生成序列号的原因。
关于postgresql - 在 PostgreSQL/PostGIS 中生成饼状楔形(几何图形)的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44336696/