找到两个彼此最接近的多边形

时间:2018-11-23 05:55:31

标签: postgresql postgis

我有一张建筑物的桌子,它们都是多边形,看起来像这样:

Building_name | Building_ID | Geom
A             | 1           | *polygon object
B             | 2           | *polygon object
C             | 3           | *polygon object

如何使用直线距离找到哪两座建筑物最接近?

输出应例如:A和B是彼此最近的建筑物。

多边形可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

cmd = "sed -i 's/name/name %s/' copy_vmlist" % content

ST_Distance计算最短线的距离(以SRID单位),而ST_ShortestLine返回最短线的实际几何形状。

答案 1 :(得分:0)

用于样品几何采集

enter image description here

在大量几何图形上,与st_distance相比,跟随SQL的速度会稍快一些,因为它利用了最近邻居索引。此外,如果出于任何原因决定使用一个,则可以将“ true”作为第三个st_distance参数以获取球面距离。

select x1.name, x2.name
from (values (1,'A',st_geomfromtext('Polygon ((325 708, 348 768, 424 758, 481 653, 421 589, 340 628, 325 708))')),
(2,'B',st_geomfromtext('Polygon ((643 891, 692 808, 769 825, 793 885, 786 923, 730 939, 705 902, 643 891))')),
(3,'C',st_geomfromtext('Polygon ((692 620, 669 553, 767 523, 882 548, 893 622, 834 683, 692 620))')),
(4,'D',st_geomfromtext('Polygon ((519 703, 549 676, 586 707, 585 751, 555 778, 526 745, 519 703))'))) x1(id,name,geom)
join (values (1,'A',st_geomfromtext('Polygon ((325 708, 348 768, 424 758, 481 653, 421 589, 340 628, 325 708))')),
(2,'B',st_geomfromtext('Polygon ((643 891, 692 808, 769 825, 793 885, 786 923, 730 939, 705 902, 643 891))')),
(3,'C',st_geomfromtext('Polygon ((692 620, 669 553, 767 523, 882 548, 893 622, 834 683, 692 620))')),
(4,'D',st_geomfromtext('Polygon ((519 703, 549 676, 586 707, 585 751, 555 778, 526 745, 519 703))'))) x2(id,name,geom)
on x1.id<>x2.id
order by x1.geom<->x2.geom
limit 1