多边形计数中的快速点 PostGIS

Fast Points in polygon count PostGIS

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

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

两张表都有索引,并且已经预先进行了真空分析。

我一直在尝试一些事情,none 似乎很有效。

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

我一定是做错了什么?? 谢谢!

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

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

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;

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