[tonyLp]百度地圖API開發實踐(1)


     首先說一點廢話:

      1. 關於名字tonylp,其實從程序員的角度來說,我是喜歡寫成tonyLp,采用駱駝法,但是不知道那時候為了什么,博客園的名字變成tony_lp,如果我沒記錯的話,這應該是c++里面的一種命名方法,歡迎拍磚哦,因為我實在記不清了。

      2.我挺喜歡博客園的,這地方大牛好多,我也喜歡在這發隨筆,但是總覺得轉載來的東西,味道會怪怪的,所以力求所有發表的東西都是自己一個字一個字敲出來的,當然我沒有任何鄙視那些轉載別人文章的人的意思,畢竟通過轉載,的卻很方便讓我欣賞到了好的文章。

     3. 作為一個奮斗在web前端的小菜鳥,我很希望有些大牛能給我推薦一些JQuery,JavaScript,Html以及其他關於web前端的書,非常感謝。

      好了,說說百度地圖API開發實踐,因為這段時間幫一個社團在做一個論壇項目,他們希望有一個地圖,可以把一些新鮮事,幫助信息標記出來。現在基於地理位置的社交活動非常熱,他們也是希望應用這個技術吧。

      通過http://developer.baidu.com/map/上面查看一些javascript類參考,然后看看它的demo,就基本可以開始開發了,不難。

      首先說說他們的目標(其實他們現在需求十分不明確,而我也只是作為了解嘗試一下百度地圖API,所以有些需求就是按照我的邏輯來的):

               1.當我點擊鏈接打開這個頁面的時候,我希望能自動定位到當前我的位置。

               2. 查看當前地圖范圍內的所有標記點

               3. 點擊每個標記點,都會有相應大的信息窗口顯示

               4. 通過搜索,我可以找到一個位置,然后標記它,並寫入相應的幫助信息(這里其實是很大的一個模塊,需求還沒太理清楚)

               5.左邊欄應該顯示我多少距離之內的所有標記點,並提供相應的信息。

               6.左邊信息中應該有超鏈接(比方說在地圖中顯示),然后點擊之后在地圖中顯示。

               7.我可以設置搜索距離,即提示方圓多少之內的所有的幫助信息

      現在能想到的就是這些需求,然后針對這些需求,我相應的程序設計思想:

               1. 獲取當前我的地址:1)通過IP獲取粗略地position(統一經緯度),然后通過這個position初始化地圖

                                            2) 通過ajax向后台獲取已經存儲的地址信息(這個postion就比較隨意了,可以記錄上一次的position,也可以在用戶注冊的時候記錄下來,具體還沒想好)

              2. 獲取當前地圖范圍內的所有標記的點,通過向后台請求position信息,然后將點一個一個mark到地圖上。這個時候得做一件額外的工作,為每個marker添加一個鼠標點擊監聽事件。

              3. 比較當前點擊的標記點和上一次點擊的標記點是否一樣,如果不一樣,就向后台請求數據包括,title,content,img鏈接(因為想做一個類似於百度信息窗的東西)

其實我現在只是實現到這里,后面的改天再繼續實現,下面附代碼和截圖,還是建議自己編,實在不是很有技術含量,看看范例基本就會了,還是多注意思想吧。

      

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>百度地圖</title>
 6 <style type="text/css">
 7 body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
 8 #l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}
 9 #r-result{height:100%;width:20%;float:left;}
10 </style>
11 <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
12 <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
13 <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
14 <script type="text/javascript" src="jquery.js"></script>
15 <script type="text/javascript" src="demo.js"></script>
16 <script type="text/javascript">
17     $(document).ready(function(){
18         initMap();
19         initInfoWindow();
20         getMark();
21         
22     });
23 </script>
24 </head>
25 <body>
26 <div id="allmap"></div>
27 </body>
28 </html>
 1 //初始化map
 2 function initMap(){
 3          var lng = 126.657717;
 4      var lat = 45.773225;
 5      var point = new BMap.Point(lng, lat);    // 創建點坐標  
 6         /*    $.ajax({
 7        url:  'XXX.action', //replace with the real action
 8        type: 'get',
 9        async: false,
10        datatype: 'json',
11        success: function(data){
12         lng = data.lng;
13         lat = data.lat;
14            if(lng != null && lat != null){
15                 point = new BMap.Point(lng,lat);
16               }
17           }     
18     });
19     */ 
20      map = new BMap.Map("allmap");            // 創建Map實例
21    map.centerAndZoom(point,14);                     // 初始化地圖,設置中心點坐標和地圖級別。
22    map.enableScrollWheelZoom();                            //啟用滾輪放大縮小
23    map.addControl(new BMap.NavigationControl());               // 添加平移縮放控件
24    map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件
25    map.addControl(new BMap.OverviewMapControl());              //添加縮略地圖控件
26 }
//增加marker點
function addMarker(point){
    var marker = new BMap.Marker(point);
    map.addOverlay(marker);
    marker.addEventListener("click", function(e){     
         getWindowInfo(marker.getPosition());  //獲取marker的位置
       searchInfoWindow.open(marker);        //更新InfoWindow信息
    })        
}
 1 /*
 2 每當我點擊一個marker時,都通過ajax,將所在的marker點向后台搜索,
 3 得到title,content,圖片,然后顯示在infoWindow中。
 4 實現步驟:
 5  1.獲取marker點坐標
 6  2.通過ajax獲得infowindow信息
 7  3.顯示在頁面上
 8  如何設置關閉,按照這種模式,是不是每次都需要后台請求數據呢,
 9  解決辦法,可以通過比較當前marker點和先前獲取到的點的區別,如果相同,
10  就不像后台請求數據了。
11   增加info窗口
12 */
13 function getWindowInfo(recPoint){
14     if( !recPoint.equals(prePoint)){
15      /*    
16             $.ajax({
17                 url: 'xxx.action',
18                 type: 'get',
19                 async: false,
20                 data: 'lng=' + recPoint.lng + '&lat='+recPoint.lat,
21                 dataType: 'json',
22                 success: function(data){
23                     if(data != null){
24                         var infoContent = data.infoContent;  //還需要完善
25                         var infoTitle = data.infoTitle;
26                         var imgSrc = data.imgSrc;
27                  
28                     var content = '<div style="margin:0;line-height:20px;padding:2px;">' +
29                             '<img src="'+imgSrc+'" alt="" style="float:right;zoom:1;overflow:hidden;width:100px;height:100px;margin-left:3px;"/>' +
30                                +infoContent+'</div>';
31                    searchInfoWindow.setTitle(infoTitle);
32                searchInfoWindow.setContent(content);
33               }
34                 }
35             });
36         */
37         console.log(recPoint.lng);
38     }
39     else{
40     //    alert("else"+recPoint.lat);
41     }
42      prePoint = recPoint;
43 }

  

好了, 差不多就這樣吧,下一篇再繼續深入。。

 以上全部都屬個人原創,請大家轉載的時候附上原創鏈接: http://www.cnblogs.com/tonylp

            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM