多边形计数PostGIS中的快点

时间:2018-01-18 12:02:17

标签: polygon postgis point intersect lateral-join

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

我有<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

我必须在这里完全做错吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

您的“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;

请注意,如果某个点在距离超过一个质心的范围内,则会重复计算。