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

问题描述 投票:0回答:3

实际上标题中的问题。

有一张桌子(osm_buildings),其中有建筑物及其多边形的地址。有一点,你需要找到最近的多边形。

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

postgresql postgis distance
3个回答
1
投票

距离算子<->在点和多边形之间很好地工作。

您可以这样查询:

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

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

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


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

0
投票

如果你想一次只返回一个结果,那么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)子查询。如果要返回多个“最接近的多边形”,只需增加限制即可。

© www.soinside.com 2019 - 2024. All rights reserved.