Postgis 最近查询: a1表有10000个点,b1表有12000个方框。需要查询a1表中每个点最近的方框是哪个。
前面通过python访问数据库的方式已经解决了此问题,但是它的效率不尽人意,实在是太慢了点。
经过一翻琢磨发现了更高效的查询方法:
a1表信息如下:
b1 表信息如下:
首先需要在postgis中生成a1、b1表的geom信息,然后直接运行sql查询代码即可:
SELECT *
FROM(
SELECT a.id,a.name,x.id ,x.name ,a.geom::geography<->x.geom::geography as Distance
FROM a1 a
CROSS JOIN LATERAL (
SELECT b.id,b.name,b.geom
FROM b1 b
ORDER BY (a.geom<->b.geom) asc
LIMIT 1
) as x
) as tmp
1万条数据几秒中就可以完成查询。