PostGIS:计算Point和2 fks之间的最小距离:origin和destination

时间:2011-06-15 08:10:52

标签: sql postgresql postgis

我有一张表Transport,其中有2个fks指向一个表Spot。那些fks存储了传输的origindestination

我需要进行查询,以获得点与原点之间以及相同点与目的地之间的最小距离。

这就是我所做的,虽然这得到了34个结果,它应该是17.我知道我做错了,但我无法正确查询:

SELECT LEAST(
   ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), s.point), 
   ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), s.point)
) FROM spot s RIGHT OUTER JOIN transport t 
ON t.origin = s.id OR t.destination = s.id;

显然我不应该在这里使用OR。我试过做双连接,但没有做对。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

你必须使用两个连接,因为你的查询需要一个表Spot意义Origin,而一个表Spot意味着目的地。

试试这样:

SELECT LEAST(
   ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), sOrigin.point), 
   ST_Distance(ST_GeographyFromText('SRID=4326; POINT(-3 40)'), sDestination.point)
) FROM transport t
LEFT OUTER JOIN spot sOrigin ON t.origin = sOrigin.id 
LEFT OUTER JOIN spot sDestination ON t.destination = sDestination.id;