关于百度地图海量打点的问题

关于百度地图海量打点的问题

作为今年7月份刚毕业的萌新,经过一系列纠结后,我最终还是选择了程序员这条脱发路,对了,既然说到这,我得去看看我的生姜洗发水到了没。
和我的很多同学一样的是,我毕业后并没有去找工作,而是留在了大四实习的公司。目前做前端开发,其实我本来是做后台的,前几天前端的小姐姐离职了,我就先顶着了,待遇不能说好,但也不算很差,朝九晚六,双休,总体来说还挺轻松。
唯一让我目前感到惆怅的是,前端的东西我就懂一些JS,很多前端的框架都没接触过,不知道到底从何下手,包括我现在写前端代码的软件还是eclipse。
有没有大牛告诉我一个准确的方向啊。

下面就说说我遇到的第一个我感觉比较有纪念意义的问题吧。

需求


公司最近给了我一个需求,让我在百度地图上展示大概几千左右的点,每个点除了经纬度外还有一些其他参数,要根据点中某个参数,渲染不同的颜色,单击相应的点,弹出其相应的信息,并根据该点的时间戳,和其他的几个表进行联动。


思路

我首先想到了百度地图api中海量点,API示例链接如下:http://lbsyun.baidu.com/jsdemo.htm#c1_19
于是我就稍加整理,完成了这个需求,作为一个入行两个月萌新,我的代码很乱,希望各位大佬多多指点。

代码

这里我就展示我的海量点实现过程吧

       var seaPoints1=[];
       var seaPoints2=[];
       var seaPoints3=[];
       var seaPoints4=[];
       var seaPoints5=[];
       var seaPoints6=[];
       var seaPoints7=[];
       var seaPoints8=[];

      for (var i = 0; i < mapData.length; i++) {//mapData是我从后台拿到的数据
           if (document.createElement('canvas').getContext) {  // 判断当前浏览器是否支持绘制海量点
               if(mapData[i].rsrp <= -110){
                           seaPoints1.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-110<mapData[i].rsrp && mapData[i].rsrp<= -105){
                   seaPoints2.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-105<mapData[i].rsrp && mapData[i].rsrp<= -100){
                   seaPoints3.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-100<mapData[i].rsrp && mapData[i].rsrp<= -95){
                   seaPoints4.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-95<mapData[i].rsrp && mapData[i].rsrp<= -85){
                   seaPoints5.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-85<mapData[i].rsrp && mapData[i].rsrp<= -70){
                   seaPoints6.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-70<mapData[i].rsrp && mapData[i].rsrp<= -50){
                   seaPoints7.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }else if(-50<mapData[i].rsrp){
                   seaPoints8.push([mapData[i].desLon,mapData[i].desLat,mapData[i].rsrp,mapData[i].timestamp])
               }
           }else {
               alert('请在chrome、safari、IE8+以上浏览器查看本示例');
           }
       }

      if(seaPoints1.length != 0){
          dadian('#ff0000',seaPoints1);
          seaPoints1=[];
      }if(seaPoints2.length != 0){
          dadian('#ff00ff',seaPoints2);
          seaPoints2=[];
      }if(seaPoints3 != 0){
          dadian('#ffff00',seaPoints3);
          seaPoints3=[];
      }if(seaPoints4 != 0){
          dadian('#00ffff',seaPoints4);
          seaPoints4=[];
      }if(seaPoints5 != 0){
          dadian('#0101fe',seaPoints5);
          seaPoints5=[];
      }if(seaPoints6 != 0){
          dadian('#30fe30',seaPoints6);
          seaPoints6=[];
      }if(seaPoints7 != 0){
          dadian('#009600',seaPoints7);
          seaPoints7=[];
      }if(seaPoints8 != 0){
          dadian('cornflowerblue',seaPoints8);
          seaPoints8=[];
      }

      //海量点 全部显示:
      function dadian(color,point) {          
          var points = [];  // 添加海量点数据
          for(var i=0;i<point.length;i++){
              points.push(new BMap.Point(point[i][0], point[i][1]));
          }
         // points.push(new BMap.Point(lng, lat));                               
          var options = {
              size: BMAP_POINT_SIZE_SMALL,
              shape:3,
              color:color
          }
         var pointCollection = new BMap.PointCollection(points, options);  // 初始化PointCollection
         pointCollection.addEventListener('click', function (e) {
             var Time0; 
             for(var i=0;i<point.length;i++){
                 if(point[i][0]==e.point.lng && point[i][1]==e.point.lat){
                     alert('经纬度:(' + e.point.lng + ',' + e.point.lat+')\n'+'rsrp:'+point[i][2]);  // 监听点击事件
                     Time0 = show()+point[i][3];
                     var getTime = new Date(Time0).getTime(); //点中的时间转化为时间戳
                     liandong(getTime); //调用联动函数                 
                 }
             }
          });
          map.addOverlay(pointCollection);  // 添加Overlay
          pointCollection.disableMassClear();//不能被清除
      }

这里我写了大量的判断,设置了很多的变量,总感觉这个代码很别扭,希望有大牛能给我一个更好的方案。

总结

最近老大又对我提了一个需求,和这个的需求差不多,是要在百度地图上展示数十万级的点,根据每个点的rsrp以及sinr的不同,展示不同的颜色,不同的是,十万级的点不用进行联动。作为萌新的我,还好运气比较好,完成了这个需求,那就下一篇再发吧。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值