实际上是标题中的问题。
有一个表(osm_buildings
),其中建筑物及其多边形的地址位于其中。有一个点,您需要找到到该点最近的多边形。
查找点之间的距离非常简单且可预测,但是如何正确且最重要的是快速找到从点到多边形的距离?
答案 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)在横向子查询中。 如果要返回更多,则只需增加一个“最接近的多边形”即可。