0

在缓冲区查询中构建简单点时遇到速度问题,即。在给定质心和缓冲区距离的情况下计算缓冲区内的点数。

我有<100质心(缓冲区)和250.000点。

两个表都有索引并且事先已经过真空分析。

我一直在尝试几件事,但似乎都没有有效地工作。

SELECT parcels.id, count(*) AS totale
FROM
    _BUFFERS  parcels,
    _POINTS ints
WHERE 
    AND ST_intersects( ST_Buffer(parcels.centroid::geography, 800), ints.geom)
GROUP BY parcels.id;

还尝试LATERAL了没有成功的连接:

SELECT r.id, r.pcount FROM
    (SELECT
        id, ST_Buffer(centroid::geography, 800) as the_geom
     FROM
        _BUFFERS ) n,
    LATERAL (
        SELECT
            n.id, count(*) as pcount
        FROM
            _POINTS p
        WHERE
            n.the_geom && geom
    ) r

我一定在这里做错了什么?谢谢!

4

1 回答 1

1

您的“geom”列是几何还是地理类型?确保它们相同...如果您使用几何图形,请确保 SRID 采用您期望的单位(例如米)

我认为您不需要创建缓冲区,您可以使用st_dwithin

IE

SELECT parcels.id, count(*) AS totale
FROM
 _BUFFERS  parcels
INNER JOIN
    _POINTS ints
on st_dwithin(parcels.centroid, ints.geom,800)
GROUP BY parcels.id;

请注意,如果一个点在您的距离内超过一个质心,它将被重复计算。

于 2018-01-18T12:15:54.083 回答