1
我正在使用谷歌地圖的公交諮詢服務的項目。你將一個圖標拖到你想要去的地方,然後應用程序會告訴你要乘哪個巴士,目前這個工作正在進行中,但是如果沒有直接巴士,我想要讓巴士組合到達一個地方。谷歌地圖mysql查詢找到巴士
我有我的城市的所有巴士路線與緯度/經度數據庫:
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)
)
如果沒有直達巴士的出發地/目的地點,我該如何檢查巴士組合?
謝謝!
BTW checkit out:http://www.mapabondi.com.ar/ 僅限西班牙語,對不起! (反饋讚賞)
編輯:
我想出了發現總線組合
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
我唯一的問題現在是業績查詢,此查詢是很慢.. 。有沒有可能使用存儲過程或函數更好?
感謝您的評論Laurent',我的一位朋友建議我可以:1)在起點附近找到所有的公共汽車2)在終點附近找到所有的公交車3)如何從附近的兩個列表中找到最近的公交車它們之間。 任何想法,如果這可能在一個或兩個查詢這可能嗎? – ricardocasares
你的問題是最古老的信息論之一。它被稱爲「圖遍歷」,可能需要許多迭代。用sql關鍵詞來搜索它,你會發現很多例子。現在,您可能更願意僅通過一次更改來找到解決方案,這更容易。 –