我有一张建筑物的桌子,它们都是多边形,看起来像这样:
Building_name | Building_ID | Geom
A | 1 | *polygon object
B | 2 | *polygon object
C | 3 | *polygon object
如何使用直线距离找到哪两座建筑物最接近?
输出应例如:A和B是彼此最近的建筑物。
多边形可能吗?
谢谢!
答案 0 :(得分:1)
cmd = "sed -i 's/name/name %s/' copy_vmlist" % content
ST_Distance
计算最短线的距离(以SRID单位),而ST_ShortestLine
返回最短线的实际几何形状。
答案 1 :(得分:0)
用于样品几何采集
在大量几何图形上,与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