百度地圖API使用第一彈------動態軌跡運動封裝
百度地圖API使用第一彈 ——動態軌跡運動封裝
你還在為冗雜的百度地圖API看著看著就想睡覺而犯愁嗎?
你還在不會使用百度地圖生成動態軌跡而犯愁嗎?
你還在為百度地圖預設的路線不符合自己的軌跡而犯愁嗎?
別愁了,向下看,–> 此法為你節約時間,願你能把更多時間留給生活
一步步來:
- 高手第一步都是 –> 度娘關鍵詞:bmap,進入第一條,這裡你可以找到bmap的所有API;
ps: 我是菜鳥,我不走這一步@@_ ,直接進入下一步: - 開啟IDE,新建HTML類文件,弄個div接收地圖,
問題出來了,地圖哪兒來的?”*.js”這樣的檔案能生成地圖嗎?先寫個標籤試試吧:
<script type="text/javascript" src="這裡放什麼呢?向下看"></script>
點選連結:生成百度地圖開發者金鑰,一路瘋狂點選配置,直到配置完,給你金鑰了回來繼續。
- 沒錯,就是它:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的金鑰"></script>
var map = new BMap.Map("allmap");
生成地圖就是這麼簡單- 或許,你可以加上:
map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);
切入正題: 動態運動軌跡
- 聽著好高大上哇,肯定很難吧@—@
- 對於路痴來說,肯定知道手機百度地圖上有路線規劃:最短時間路線,最近距離路線… …
- 我想說的是,這裡一樣有這些:
- 你要從學校去網咖,那麼需要兩點間動態軌跡運動:(詳情見文件)
// 百度地圖例項化
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(113.962196, 22.545144), 13);
map.enableScrollWheelZoom(); // 允許滾輪縮放
// 怎麼走的選擇
var myIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/Mario.png", new BMap.Size(32, 70), { //小車圖片
offset: new BMap.Size(0, -5), //相當於CSS精靈
imageOffset: new BMap.Size(0, 0) //圖片的偏移量。為了是圖片底部中心對準座標點。
});
var p01 = new BMap.Point(113.962196, 22.545144);
var p02 = new BMap.Point(113.987268, 22.54884);
var p03 = new BMap.Point(113.976281, 22.53543);
var p04 = new BMap.Point(113.957956, 22.539636);
//生成軌跡線路
function run(p3, p2) {
p1 = arguments[0];
p2 = arguments[1];
// 生成路徑
var walking2 = new BMap.WalkingRoute(map, {
renderOptions: { map: map, enableDragging: true, autoViewport: true }
});
walking2.search(p1, p2);
var walking = new BMap.WalkingRoute(map);
walking.search(p1, p2);
walking.setSearchCompleteCallback(function () {
var pts = walking.getResults().getPlan(0).getRoute(0).getPath(); //得到一個數組
console.log(pts);
setTimeout(function () {
jumps(pts);
}, 1000);
});
}
// 可以根據軌跡線路跑起來的函式
function jumps(pts) {
var carMk = new BMap.Marker(pts[0], { icon: myIcon });
map.addOverlay(carMk);
var i = 0;
function resetMkPoint(i) {
carMk.setPosition(pts[i]);
if (i < pts.length) {
setTimeout(function () {
i++;
resetMkPoint(i);
}, 2);
} else {
return
}
}
setTimeout(function () {
resetMkPoint(1);
}, 2)
}
//傳入兩個點,跑起來吧
run(p03, p02);
- 兩點間很簡單,但是這位同學說放學後我要先去食堂吃個飯,再去超市買瓶水,然後去朋友家找朋友,再一起去網咖…唉,唉,我說這位同學,你咋就這麼複雜呢…………——#¥%(×(……&×%…………我–擦–前方高能!!!重點來啦。
//前面的路線選擇,軌跡線就不貼上了,自己補一下
// 運動軌跡封裝
function run(ar) {
var arg = ar;
function p(x, y) {
var r = [];
for (var h = 0; h < arguments.length; h++) {
r.push(arguments[h]);
}
var p1 = r[0];
var p2 = r[1];
console.log('原始值', arg.indexOf(p1));
var driving = new BMap.DrivingRoute(map); //駕車例項
driving.search(p1, p2);
driving.setSearchCompleteCallback(function () {
var pts = driving.getResults().getPlan(0).getRoute(0).getPath();
var carMk = new BMap.Marker(pts[0], { icon: myIcon });
map.addOverlay(carMk);
var i = 0;
function resetMkPoint(i) {
carMk.setPosition(pts[i]);
var s = arg.indexOf(p1);
if (i < pts.length) {
setTimeout(function () {
i++;
resetMkPoint(i);
}, 20);
} else {
console.log('當前值', s);
if (s < arg.length - 1) {
s++;
carMk.hide();
p(arg[s], arg[s + 1]);
console.log('加過後的值', s, arg[s], arg);
}
}
}
setTimeout(function () {
resetMkPoint(5);
}, 100)
});
}
p(arg[0], arg[1]);
}
//呼叫,小菜一碟,放進去幾個位置的座標就好了
run([學校,食堂,超市,朋友家,網咖]);
- 貼上未封裝的動態軌跡來比較下吧,懶懶的小編已經不想回頭再看了,太多了
window.run = function () {
var driving = new BMap.DrivingRoute(map); //駕車例項
driving.search(myP1, myP2);
driving.setSearchCompleteCallback(function () {
var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通過駕車例項,獲得一系列點的陣列
var paths = pts.length; //獲得有幾個點
var carMk = new BMap.Marker(pts[0], { icon: myIcon });
map.addOverlay(carMk);
i = 0;
function resetMkPoint(i) {
carMk.setPosition(pts[i]);
if (i < paths) {
setTimeout(function () {
i++;
resetMkPoint(i);
}, 2);
} else {
carMk.hide();
window.runs();
}
}
setTimeout(function () {
resetMkPoint(5);
}, 100)
});
}
window.runs = function () {
var driving = new BMap.DrivingRoute(map); //駕車例項
driving.search(myP2, myP3);
driving.setSearchCompleteCallback(function () {
var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通過駕車例項,獲得一系列點的陣列
var paths = pts.length; //獲得有幾個點
var carMk = new BMap.Marker(pts[0], { icon: myIcon });
map.addOverlay(carMk);
i = 0;
function resetMkPoint(i) {
carMk.setPosition(pts[i]);
if (i < paths) {
setTimeout(function () {
i++;
resetMkPoint(i);
}, 20);
} else {
window.runss();
}
}
setTimeout(function () {
resetMkPoint(5);
}, 100)
});
}
window.runss = function () {
var driving = new BMap.DrivingRoute(map); //駕車例項
driving.search(myP3, myP4);
driving.setSearchCompleteCallback(function () {
var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通過駕車例項,獲得一系列點的陣列
var paths = pts.length; //獲得有幾個點
var carMk = new BMap.Marker(pts[0], { icon: myIcon });
map.addOverlay(carMk);
i = 0;
function resetMkPoint(i) {
carMk.setPosition(pts[i]);
if (i < paths) {
setTimeout(function () {
i++;
resetMkPoint(i);
}, 50);
}
}
setTimeout(function () {
resetMkPoint(5);
}, 100)
});
}
setTimeout(function () {
run();
}, 1500);
- 最後還是獻上封裝原理吧,方便各位大俠少蝦們使用:
- 寫一個兩點間動態軌跡的必包函式p(),
- 通過父級函式run()給p()傳遞引數,這裡是有講究的,傳參需要轉換arguments引數
- 在run();裡面執行一次p(argument[0],arguments[1]);
- 一次執行完才走出去一步,那就再來執行一次唄,判斷第一次執行完了,就把引數的index加1,執行第二次,(詳見示例中控制檯列印的三組index資料)
- 判斷run()傳回去的所有引數全部執行完畢,結束運動。
- 自己動手實踐下吧~~
demo地址:
相關推薦
百度地圖API使用第一彈------動態軌跡運動封裝
百度地圖API使用第一彈 ——動態軌跡運動封裝 你還在為冗雜的百度地圖API看著看著就想睡覺而犯愁嗎? 你還在不會使用百度地圖生成動態軌跡而犯愁嗎? 你還在為百度地圖預設的路線不符合自己的軌跡而犯愁嗎? 別愁了,向下看,–>
百度地圖API三:實時軌跡動態展現
上一個文章講了如何根據標註點座標範圍計算顯示縮放級別zoom自適應顯示地圖。 本文講實時動態軌跡的實現。 先在上面畫一些初始的標註點和軌跡線。然後再動態生成一些點。 然後我們隨機生成新的軌跡點並顯
百度地圖API四:實現軌跡動態回放功能
百度地圖提供的介面很強大,開發者可以發揮自己的創造力做出來許多厲害的東西,只有想不到精彩。 本文記錄 百度地圖實現實現 軌跡回放的功能。 所謂軌跡回放功能。 是指選擇某個時間段,然後在地圖上再現這個時間段內軌跡的出現情況。 什麼時候出現了第幾個軌跡點。隔幾秒出現下一個
百度地圖api描繪車輛歷史軌跡圖
最近公司在做專案需需求:車輛定位後在地圖顯示歷史軌跡的功能 一開始使用了google的地圖api,但是發現會一直關閉,索性支援下國產,使用了百度地圖api search方法把兩個點連線成線後,會出現起點和終點的圖示,但是需要要求只有第一個點和最後一個點是起點和終點
Python調用百度地圖API(路線規劃、POI檢索)——第一部分
api mil 申請 eap pos ice poi檢索 pytho 例如 項目的目的是為了查詢某個點附近某些POI的最近距離,例如查詢天安門到附近最近的商場的距離(時間) 1.百度地圖API 程序中用到百度地圖的兩個API,分別是 (1)路線規劃服務(又名Directio
關於Android6.0以上動態獲取執行時許可權、及無法正常執行百度地圖API的問題
Google早在Android6.0的時候就全面修改了應用程式的許可權申請機制,除了需要在AndroidManifest.xml配置檔案中事先做好許可權配置之外,部分被認為是危險的系統許可權還需要在程式碼中專門去單獨申請。Google將這一改變稱為“執行時許可權(RunTi
百度地圖API,根據經緯度實現車輛移動軌跡繪製
百度地圖,實現車輛軌跡繪製 實現思路: 1.根據經緯度實現車輛軌跡繪製 2.使用百度地圖API的兩個覆蓋物實現,Polyline(折線)繪製軌跡,Marker(圖示)繪製小車圖示 3.將每兩個座標間連線起來,形成連貫的軌跡線路 4.生成下一個圖示後刪除上一個繪製的圖示,形成
HTML5頁面直接調用百度地圖API,獲取當前位置,直接導航目的地(轉)
wid dir tle mark utf-8 mil 獲取 open init HTML5頁面直接調用百度地圖API,獲取當前位置,直接導航目的地 我是應用在微信中,自定義菜單,菜單直接鏈接到這個HTML5頁面,獲取當前位置後,頁面中定好目的地,這樣打開頁面後直接進入導航頁
百度地圖api入門介紹(js篇)
顯示 .com cnblogs androi web 入門介紹 步驟 api 地圖api 最近因為用到了百度地圖的api,感覺還有點用記錄一下,一方面充實一下自己,第二也希望有用到的同學可以參考一下;因為之前用過android baidu api 所以再用web
在混合app開發過程中使用百度地圖api的出現坐標偏差的解決
百度 api call cordova overlay forum gpo ext ddr 在項目中使用ngCordova的$cordovaGeolocation模塊獲取當前位置經緯度,當展示在百度地圖中時發現有誤差(我的測試誤差為1.7公裏左右),查資料發現百度地圖經緯度
百度地圖api之----根據用戶ip定位城市
服務 利用 bsp result 城市 blog 經緯度 name 定位 LocalCity 這個類是利用用戶IP地址去百度數據庫裏查詢得到IP所在的城市,用法如下: var objCity = new BMap.LocalCity(); objCity.get(func
百度地圖api實例
code href ont current 設置 span info div 控件 <div id="allmap"></div> <script type="text/javascript" src="http://api.map.bai
百度地圖api開發:根據坐標獲得地理描述地址
實例 oca str 地理 location api code city api開發 // 創建地理編碼實例 var myGeo = new BMap.Geocoder(); // 根據坐標得到地址描述
百度地圖API
com element local del calc info 2.0 mat charset <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con
Python利用百度地圖api批量獲取地址經緯度
req excel文件 經緯度 imp print pen with 文件 key 1.pip安裝xlrd,xlwt,requests模塊. 2.在工程目錄處放置地點Excel文件。 python代碼: #coding:utf-8 import xlrd import x
百度地圖api使用
apt htc remove 百度地圖 自己 密鑰 技術 title mar 1.入門程序 (1)引入baidu地圖的javascrpt文件(http路徑訪問百度地圖api官網) <script src="http://api.map.baidu.com/api?
百度地圖API一:根據標註點坐標範圍計算顯示縮放級別zoom自適應顯示地圖
var spa get bsp pan nts viewport 百度 getview 百度地圖中根據頁面中的point,自動設置縮放級別和視圖中心,將所有的point在視圖範圍內展示。 var points = [point1, point2,point3];
百度地圖API的使用方法
地圖 rip ext class hive 百度地圖 containe 其中 map 全文 : http://www.cnblogs.com/xuhongfei/archive/2013/04/10/3011964.html 引用百度地圖API文件 當您引用地圖
百度地圖api 常用 例子
getc onf htc 默認 tor settime min navig 通過 功能一:獲取map地圖窗口的可視區域: var map = new BMap.Map("allmap"); // 創建Map實例 map.centerAndZoom(n
百度地圖api-查詢周邊
circle htm idt var result 靜態頁 tid cli ng- 利用百度地圖api接口實現周邊配套設施查詢 1. 靜態頁面部分: 1 <div class="row"> 2