gpt4 book ai didi

sql - 如何按定义的计数对点进行分组并为每组返回一个边界框?

转载 作者:行者123 更新时间:2023-11-29 12:07:09 25 4
gpt4 key购买 nike

我有一个很大的表格,上面的点间距非常不规则。给定一个用户定义的边界框,我想返回代表相同数量点的子边界框行。子框的形状无关紧要,只要用户定义的边界框中的所有点都被表示和计数即可。

这是我要实现的逻辑:

  1. 选择与用户边界框相交的所有点。
  2. 按x值对所有点排序
  3. 对计数 <= 1000 的有序点进行分组
  4. 返回每个组的 ST_Extent。

我不太确定从哪里开始,因为我在 SQL 和 PostGIS 方面没有太多经验,但是像这样...?

SELECT 
ST_Extent(geom) as extent,
c.count
FROM
xyz_master as x,
(
SELECT
COUNT(*) as count
FROM
xyz_master
) as c
WHERE
c.count < 1000
GROUP BY
extent
;

当然,Postgres 会这样回应:

ERROR:  aggregate functions are not allowed in GROUP BY
LINE 3: ST_Extent(geom) as extent

我意识到子查询并没有多大意义,因为它只是返回包含所有点数的一行,但我不知道从哪里开始。

谁能指出我正确的方向?

谢谢。

最佳答案

根据 x 对表格进行排序,然后为每 1000 个创建一个不同的组。使用 CEIL 是一种方法。请注意,您必须在以下代码中替换用户提供的 xmin、ymin、xmax、ymax 和 srid:

SELECT ST_EXTENT(t2.geom) extent, COUNT(*) count
FROM (
SELECT t1.geom, ROW_NUMBER() OVER (ORDER BY ST_X(t1.geom)) row_num
FROM xyz_master t1
WHERE ST_INTERSECTS(ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid), t1.geom)
) t2
GROUP BY CEIL(t2.row_num / 1000.0);

关于sql - 如何按定义的计数对点进行分组并为每组返回一个边界框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com