多边形计数中的快速点 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;
请注意,如果一个点在您距离多个质心的范围内,它将被重复计算。
我在缓冲区 查询中构建简单的 点时遇到速度问题,即。 在给定质心和缓冲区距离的情况下计算缓冲区内的点数。
我有 <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;
请注意,如果一个点在您距离多个质心的范围内,它将被重复计算。