[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 { 100%;height: 100%;overflow: hidden;margin:0;}
 8 #l-map{height:100%;78%;float:left;border-right:2px solid #bcbcbc;}
 9 #r-result{height:100%;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;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

            

原文地址:https://www.cnblogs.com/tonylp/p/2847961.html