Я работаю над проектом для автобусной консультационной службы с использованием карт Google. Вы перетаскиваете значок в то место, где вы находитесь, и куда вы хотите отправиться, и приложение сообщит, какой автобус взять, это работает прямо сейчас, но я хочу создать комбинации автобусов, чтобы добраться до места, если нет прямого автобуса.
У меня есть все автобусные маршруты моего города в базу данных с широтой / долготой:
id | bus_id | lat | lng
-------------------------------------
1 | 12 | -23.232 | 23.328
2 | 12 | -23.233 | 23.327
3 | 12 | -23.234 | 23.326
4 | 12 | -23.235 | 23.325
Мой запрос на поиск ближайших автобусов к пункту назначения широта / долгота следующий:
SELECT
id, number
FROM buses
WHERE id IN
(
SELECT bus_id
FROM coord
WHERE
POW((lat - '.$points["direction"]["lat"].'), 2) + POW((lng - '.$points["direction"]["lng"].'), 2) < POW(('.$distance.' / 111.12), 2)
)
AND id IN
(
SELECT bus_id
FROM coord
WHERE
POW((lat - '.$points["person"]["lat"].'), 2) + POW((lng - '.$points["person"]["lng"].'), 2) < POW(('.$distance.' / 111.12), 2)
)
Как я могу проверить автобусные комбинации, если нет прямой шины для пунктов отправления / назначения?
Спасибо !!
Кстати, выписка: http://www.mapabondi.com.ar/
Только на испанском языке, извините! (обратная связь приветствуется)
EDIT:
Я пришел с запросом, который выясняет комбинации шин
SELECT
o.bus_id,
d.bus_id,
o.lat,
o.lng,
d.lat,
d.lng,
ROUND(GeoDistKM(o.lat,o.lng,d.lat,d.lng)) AS distance
FROM coord o
JOIN coord d
WHERE o.bus_id IN (
SELECT bus_id
FROM coord
WHERE
POW((lat - -31.528361), 2) + POW((lng - -68.583527), 2) < POW((1 / 111.12), 2)
)
AND d.bus_id IN (
SELECT bus_id
FROM coord
WHERE
POW((lat - -31.571516), 2) + POW((lng - -68.521385), 2) < POW((1 / 111.12), 2)
)
GROUP BY d.bus_id,o.bus_id
HAVING distance < 1
ORDER BY distance ASC
Моя единственная проблема сейчас связана с производительностью, этот запрос очень медленный ... Есть ли шанс, что он может стать лучше с помощью хранимой процедуры или функции?