PostGIS: Расчет минимального расстояния между точкой и 2 фкс: источник и пункт назначения - PullRequest
2 голосов
/ 15 июня 2011

У меня есть таблица Transport, в которой 2 fks указывают на таблицу Spot. эти фкс хранят origin и destination транспорта.

Мне нужно сделать запрос, который получает минимальное расстояние между точкой и началом координат и между одной и той же точкой и пунктом назначения.

Это то, что я сделал, хотя это дает мне 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;

Очевидно, я не должен использовать ИЛИ здесь. Я пытался сделать двойное соединение, но не понял правильно.

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 15 июня 2011

Вы должны использовать два объединения, потому что вашему запросу нужна таблица Spot, означающая Origin, и таблица Spot, означающая Destination.

Попробуй так:

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;
...