在 Day2 的 Bus API(link) 介紹 、Day 3 的 圖層變變變(link)、以及Day 4 的 Marker 動起來(link)後,躍躍欲試地想把學到的東西做統整,除了先前的知識,還會帶入邏輯
(演算法or解法)。
每10秒 call 一次 API,將取得的資料呈現於地圖上
一開始載入網頁時 call 一次 API
成功,將取得的經緯度,車牌,加入地圖。
之後的 每10秒更新
,setInterval() 設定每10秒call一次API,API回傳成功後再更新地圖。
而更新地圖細部的動作 包括 移除之前的Markers(因此需要把前10秒的做儲存),再加入新的Markers進去。
var LeafIcon = L.Icon.extend({ // 設定圖片大小,定錨位置,氣泡框位置
options: {
iconSize: [24, 24],
iconAnchor: [12, 12],
popupAnchor: [0, -12]
}
});
// 設定圖片來源網址
greenIcon = new LeafIcon({iconUrl: 'https://cdn3.iconfinder.com/data/icons/education-vol-1-34/512/1_Bus_school_school_bus_vehicle-128.png'});
$(function () {
$.ajax({
type: 'GET',
url: 'https://ptx.transportdata.tw/MOTC/v2/Bus/RealTimeByFrequency/InterCity/9018?$top=150&$format=JSON', //包含兩個方向(去回程)前150筆資料,以JSON格式做回傳
dataType: 'json',
headers: GetAuthorizationHeader(), // 憑證 API token
success: function (Data) {
showBusWay2(Data); // 將取得的資料,更新地圖
}
});
});
function GetAuthorizationHeader() {
var AppID = '請妥善保存AppID';
var AppKey = '請妥善保存AppKey';
var GMTString = new Date().toGMTString();
var ShaObj = new jsSHA('SHA-1', 'TEXT');
ShaObj.setHMACKey(AppKey, 'TEXT');
ShaObj.update('x-date: ' + GMTString);
var HMAC = ShaObj.getHMAC('B64');
var Authorization = 'hmac username=\"' + AppID + '\", algorithm=\"hmac-sha1\", headers=\"x-date\", signature=\"' + HMAC + '\"';
return { 'Authorization': Authorization, 'X-Date': GMTString /*,'Accept-Encoding': 'gzip'*/}; //如果要將js運行在伺服器,可額外加入 'Accept-Encoding': 'gzip',要求壓縮以減少網路傳輸資料量
}
function showBusWay2(items) {
console.log(items);
for(var i=0;i<markers.length;i++)
{
mymap.removeLayer(markers[i]); // 移除舊圖標
}
// 加入新座標
for (var i = 0; i < items.length; i++){
var pop1 = L.popup({autoClose: false,closeOnClick:false,autoPan: false}).setContent(items[i].PlateNumb);
theMarker = L.marker([items[i].BusPosition.PositionLat, items[i].BusPosition.PositionLon], {icon: greenIcon}).addTo(mymap);
theMarker.bindPopup(pop1).openPopup();
markers.push(theMarker);
}
}
setInterval(function () {
$(function () {
$.ajax({
type: 'GET',
url: 'https://ptx.transportdata.tw/MOTC/v2/Bus/RealTimeByFrequency/InterCity/9018?$top=150&$format=JSON',
dataType: 'json',
headers: GetAuthorizationHeader(),
success: function (Data) {
showBusWay2(Data);
}
});
});
},10000);
有氣泡框顯示每台車車牌,每隔一段時間,更新地圖。
API Quota 不夠
一般會員
=>一天兩萬次 => 我申請這個的,其實就滿夠用啦。我第一個小疑惑居然不是關於專業的XD
你那個動圖是怎麼用的阿~(是之前那個自製GIF嗎?
而且我第一次知道可以實際看到車車在路上移動的樣子~
感覺有點酷
Imgur 的 to GIF 可以做到。
影片轉動圖
用LINE截圖,也可以截成動畫,但時間比較短而已。