百度地图中实现历史轨迹显示为BMap.InfoWindow添加多个不同时间点但相同经纬度点的信息

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:43   1998   0

今天应boss要求实现巡更,既然是巡更,那么几个点在轮巡,那么显示历史轨迹时后面时刻的点的信息会覆盖前面时刻的信息,如何在一个marker上显示不同时间点的信息呢??

主要时取数据时的循环问题,后台放回的数据不变,在前台进行判断如果第i个返回的点的坐标已经在地图上显示,则显示此点的InfoWindow时,在原来的信息上追加新的信息(保留原来的信息)。因为可能重复取数据等等问题,经验不够绕来绕去终于解决了。

代码如下:

 var pointarr=new Array();
               for(var i = 0; i < msg.hislist.length; i++){
                                        //alert(msg.hislist[i].point_id);
                                        if(pointarr.indexOf(i)>-1){
                                        //alert('跳出循环');//判断是否已经已经显示过该点的信息,避免重复。
                                        continue;}
                                        var marker=new BMap.Marker(
                                            new BMap.Point(msg.hislist[i].GPS_LONG,msg.hislist[i].GPS_LAT)
                                        );
                                        text="<font size='2' color='#0066FF'>定位位置:</font> "+"<font size='2'>"+msg.hislist[i].address+"</font>"+"<hr style='color:#0066FF'><font size='2' color='#0066FF'>巡更人员:</font> "+"<font size='2'>"+msg.hislist[i].name+"</font>"+"<hr style='color:#0066FF'><font size='2' color='#0066FF'>定位时间:</font> "+"<font size='2'>"+msg.hislist[i].GPS_UTC+"</font>"+"<hr style='color:#0066FF'>";
                                        for (var j=i+1;j< msg.hislist.length; j++){
                                                if(msg.hislist[j].point_id==msg.hislist[i].point_id){
                                                pointarr.push(j);//将已经显示过的点保存在一个数组中,这里每个点的point_id就代表巡更点的编号,也就是将相同巡更点的历史轨迹信息保存在同一个数组中
                                                        var textadd="<font size='2' color='#0066FF'>巡更人员:</font> "+"<font size='2'>"+msg.hislist[j].name+"</font>"+"<hr style='color:#0066FF'><font size='2' color='#0066FF'>定位时间:</font> "+"<font size='2'>"+msg.hislist[j].GPS_UTC+"</font>"+"<hr style='color:#0066FF'>";
                                                        text=text+textadd;
                                        }
                                        }
                                        var infoWindow = new BMap.InfoWindow(text);
                                        marker.infoWindow=infoWindow;
                                        marker.addEventListener("click",function(e){
                                                this.openInfoWindow(e.target.infoWindow)
                                });
                                        maplet.addOverlay(marker);
                                }


最后的效果如下:


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP