如何找到从点到多边形的最短距离?

时间:2018-10-14 21:33:40

标签: postgresql postgis distance

实际上是标题中的问题。

有一个表(osm_buildings),其中建筑物及其多边形的地址位于其中。有一个点,您需要找到到该点最近的多边形。

查找点之间的距离非常简单且可预测,但是如何正确且最重要的是快速找到从点到多边形的距离?

3 个答案:

答案 0 :(得分:1)

距离运算符<->在点和多边形之间的效果很好。

您可以这样查询:

SELECT b.*
FROM osm_buildings AS b
ORDER BY b.polygon <-> 'POINT(3.14 2.78)'::geometry
LIMIT 10;

这将使最接近该点的10座建筑物。

该查询可以使用polygon列上的索引。

答案 1 :(得分:0)

您可以在点和多边形之间使用ST_DISTANCE,它将返回最短的距离。

SELECT ST_Distance(
        'SRID=4326;POINT(-70 42)'::geometry,
        'SRID=4326;POLYGON((-72 42, -73 42, -73 43, -72 43, -72 42))'::geometry
    );

--> 2

答案 2 :(得分:0)

如果您想一次只返回1分,那么Laurenz Albe的答案就是完美的选择。但是,如果您想一次返回一个以上的结果 我假设您将建筑物存储在某些几何/地理类型字段中,而不是文本中。

select t2.*, a.*
  from target t2,
  lateral (select o.*
             from osm_buildings o, target t
            where t2.id=t.id
            order by st_distance(o.geom::geography, t.geom::geography) limit 1) a

如果您的数据集很大,并且您接受了从某些点开始在某个可接受范围(例如1 km)内存在闭合多边形的功能,则可以在where子句中添加st_dwithin(o.geom,t.geom,your_max_distance)在横向子查询中。 如果要返回更多,则只需增加一个“最接近的多边形”即可。