PostGIS两个大点之间的最小距离

时间:2018-01-31 21:09:34

标签: postgis

我在PostGIS中有两个点表,比如A和B,我想知道,对于A中的每个点,距离B中最近点的距离是多少。我能够解决这个问题。使用以下查询进行分析:

let headers = ["Authorization": "Token \(token!)"]

但是,我在每个表中都有几百万个点,这个查询无限期地运行。有没有更有效的方法来解决这个问题。我愿意接近一个大致的距离,而不是一个确切的距离。

编辑:对JGH提供的答案进行略微修改,以便在未投影点的情况下以米为单位返回距离而非度数。

SELECT a.id, MIN(ST_Distance_Sphere(a.geom, b.geom))
FROM table_a a, table_b b
GROUP BY a.id;

1 个答案:

答案 0 :(得分:4)

您的查询速度很慢,因为它在不使用任何索引的情况下计算每个点之间的距离。如果在order by子句中使用,您可以重写它以使用使用索引的<->运算符。

select a.id,closest_pt.id, closest_pt.dist
from tablea a
CROSS JOIN LATERAL
  (SELECT
     id , 
     a.geom <-> b.geom as dist
     FROM tableb b
     ORDER BY a.geom <-> b.geom
   LIMIT 1) AS closest_pt;