1. 程式人生 > >百度地圖API使用第一彈------動態軌跡運動封裝

百度地圖API使用第一彈------動態軌跡運動封裝

百度地圖API使用第一彈     ——動態軌跡運動封裝

你還在為冗雜的百度地圖API看著看著就想睡覺而犯愁嗎?
你還在不會使用百度地圖生成動態軌跡而犯愁嗎?
你還在為百度地圖預設的路線不符合自己的軌跡而犯愁嗎?
別愁了,向下看,–> 此法為你節約時間,願你能把更多時間留給生活

一步步來:

  1. 高手第一步都是 –> 度娘關鍵詞:bmap,進入第一條,這裡你可以找到bmap的所有API;
    ps: 我是菜鳥,我不走這一步@@_ ,直接進入下一步:
  2. 開啟IDE,新建HTML類文件,弄個div接收地圖,
  3. 問題出來了,地圖哪兒來的?”*.js”這樣的檔案能生成地圖嗎?先寫個標籤試試吧: <script type="text/javascript" src="這裡放什麼呢?向下看"></script>

  4. 點選連結:生成百度地圖開發者金鑰,一路瘋狂點選配置,直到配置完,給你金鑰了回來繼續。

  5. 沒錯,就是它:<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的金鑰"></script>
  6. var map = new BMap.Map("allmap");生成地圖就是這麼簡單
  7. 或許,你可以加上: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);
  • 最後還是獻上封裝原理吧,方便各位大俠少蝦們使用:
    1. 寫一個兩點間動態軌跡的必包函式p(),
    2. 通過父級函式run()給p()傳遞引數,這裡是有講究的,傳參需要轉換arguments引數
    3. 在run();裡面執行一次p(argument[0],arguments[1]);
    4. 一次執行完才走出去一步,那就再來執行一次唄,判斷第一次執行完了,就把引數的index加1,執行第二次,(詳見示例中控制檯列印的三組index資料)
    5. 判斷run()傳回去的所有引數全部執行完畢,結束運動。
    6. 自己動手實踐下吧~~

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