我遇到速度问题,在缓冲区 查询中构建一个简单的 点,即。 在给定质心和缓冲距离的情况下计算缓冲区内的点数。
我有<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
我必须在这里完全做错吗? 谢谢!
答案 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;
请注意,如果某个点在距离超过一个质心的范围内,则会重复计算。