2011-10-08 60 views
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 

我唯一的問題現在是業績查詢,此查詢是很慢.. 。有沒有可能使用存儲過程或函數更好?

回答

1

不是一個真正的答案,但可能是讓你開始的東西。

我想你應該考慮增加一個新表bus_stops

bus_id bus_stop_name lat  lon 
12  stadium  -23.145 23.315 
12  halembra  -23.234 23.326 
... 
14  halembra  -23.234 23.326 
14  dali   -23.242 23.345 

然後,找到一個對應關係將更加容易:

  • 找到啓動和停止最近的巴士由歐氏距離
  • 發現停共享總線的路徑使用bus_stops表格停止
    • 此問題在Graph Theory中形式化並且稱爲圖遍歷,有關信息和示例代碼,請參見this google query

雖然不容易!祝你好運。

+0

感謝您的評論Laurent',我的一位朋友建議我可以:1)在起點附近找到所有的公共汽車2)在終點附近找到所有的公交車3)如何從附近的兩個列表中找到最近的公交車它們之間。 任何想法,如果這可能在一個或兩個查詢這可能嗎? – ricardocasares

+0

你的問題是最古老的信息論之一。它被稱爲「圖遍歷」,可能需要許多迭代。用sql關鍵詞來搜索它,你會發現很多例子。現在,您可能更願意僅通過一次更改來找到解決方案,這更容易。 –