使用百度地圖API來完成交大校園巴士時刻表

本文最初發佈於個人我的博客:Jerry的樂園javascript

交大的校園巴士時刻表都只能在車站的站牌上查看。這對於須要出行的學生來講很是不方便,沒法合理作好出行的安排。爲了解決這個問題,我和同一個套件的兩位同窗一塊兒完成了這個簡單的app。這篇博客將簡要介紹這個web應用是如何實現的。如下是效果圖,實際的效果請到http://zry656565.github.io/SJTU-Bus查看。css

SJTU-Bus

完成這個應用的主要步驟:html

  • 申請百度地圖API訪問權限
  • 添加校園巴士車站
  • 繪製校園巴士路徑
  • 彈出校園巴士時刻表

申請百度地圖API訪問權限

百度地圖JavaScript API免費對外開放。自v1.5版本起,您需先申請密鑰(ak)纔可以使用,接口(除發送短信功能外)無使用次數限制。java

所以咱們須要先申請密鑰,過程很是簡單,幾步就完成,在此就很少贅述了。申請完畢你就獲得了屬於本身的ak,接下來就能夠創建以下的hello world網頁了哦!別忘了把ak=您的密鑰這部分改稱你申請好的密鑰。git

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微軟雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script>
    <title>地圖展現</title>
</head>
<body>
    <div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
    // 百度地圖API功能
    var map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
    map.addControl(new BMap.MapTypeControl());
    map.setCurrentCity("北京");
</script>

添加校園巴士車站

首先本應用全部的數據都存儲在一個data.json文件中,其中校園巴士車站存儲的數據結構以下。數組中每個子數組表明一個車站,子數組的三個元素分別表明站點名和經緯度。github

{
    "stopList":[
        ["東川路地鐵站", 121.426814, 31.023853],
        ["菁菁堂", 121.436534, 31.02475],
        ["校醫院", 121.439911, 31.025764],
        ["東上院", 121.445463, 31.028007],
        ["東中院", 121.444457, 31.030127],
        ["新圖書館", 121.443954, 31.03155],
        ["行政B樓", 121.447601, 31.032742],
        ["電信學院", 121.448751, 31.03155],
        ["凱旋門", 121.452308, 31.029431]
    ]
}

在設計好了上面的數據結構後,添加車站就很是容易了:web

for (var i = 0; i < stopList.length; i++) {
    var point = new BMap.Point(stopList[i][1], stopList[i][2]);
    var marker = new BMap.Marker(point);
    var label = new BMap.Label(stopList[i][0],{offset:new BMap.Size(20,-10)});
    marker.setLabel(label);
    map.addOverlay(marker);
}

繪製校園巴士路徑

校園巴士行車路徑存儲的數據結構以下,就是由一堆點的經緯度構成的。json

{
    "lineList": [
        [121.436534, 31.02475],
        [121.439911, 31.025764],
        [121.445535, 31.027412],
        [121.445301, 31.027984],
        [121.444331, 31.030104],
        [121.443774, 31.031605],
        [121.448373, 31.033121],
        [121.448319, 31.032285]
    ]
}

在設計好了上面的數據結構後,依樣畫葫蘆,咱們就能獲得想要的路徑了:api

//繪製路線
var pointArr = [];
for (var i = 0; i < lineList.length; i++) {
    pointArr.push(new BMap.Point(lineList[i][0], lineList[i][1]));
}
var polyline = new BMap.Polyline(pointArr, {strokeColor:"blue", strokeWeight:5, strokeOpacity:0.5});
map.addOverlay(polyline);

彈出校園巴士時刻表

校園巴士行車時刻表存儲的數據結構以下,就是由一堆點的經緯度構成的。數組

{
    "stopTime":{
        "東川路地鐵站": {
            "direct1": "07:24 07:39 07:54 08:09 17:03 17:28 17:58 18:43 19:28 20:28",
            "festival_direct1": "8:24 16:58 17:43 18:28",
        },
        "菁菁堂": {
            "direct1": "07:30 07:45 08:00 08:15 08:25 08:40 09:00 09:20 09:40 10:00",
            "direct2": "08:30 08:50 09:10 09:30 10:00 10:30 11:00 11:30 12:30 13:30",
            "festival_direct1": "08:30 09:30 10:30 11:30",
            "festival_direct2": "09:00 10:00 11:00 12:00"
        },
        "校醫院": {
            "direct1": "07:30 07:45 08:00 08:15 08:25 08:40 09:00 09:20 09:40 10:00",
            "direct2": "08:50 09:10 09:30 09:50 10:20 10:50 11:20 11:50 12:50 13:50",
            "festival_direct1": "08:30 09:30 10:30 11:30",
            "festival_direct2": "09:20 10:20 11:20 12:20"
        }
    }
}

在設計好了上面的數據結構後,對以前添加巴士站點的代碼稍加修改如下就搞定了,具體要添加的內容還比較多,能夠移步源碼查看。

還有哪些工做?

  • 東川路站的經緯度須要修正
  • 支持小屏手機的訪問
  • 有興趣的同窗能夠fork個人項目

反饋與建議

  • 本應用是由幾位交大的同窗利用課餘時間製做,有什麼問題能夠及時反饋給咱們。
  • 全部的反饋建議請在issue版提交
  • 或者直接在本博客留言

參考資料

相關文章
相關標籤/搜索