在不加载整个地图的情况下更新谷歌地图中的标记

Posted

技术标签:

【中文标题】在不加载整个地图的情况下更新谷歌地图中的标记【英文标题】:Update Marker in Google Maps without loading whole map 【发布时间】:2019-01-08 21:14:50 【问题描述】:

我在 CI 中有一个应用程序,我每隔两秒从数据库中获取员工的当前位置并绘制其当前位置标记 我的代码正在工作,但每 2 秒后它会通过显示新的位置标记来更新标记,但也会继续显示旧标记。 我想在显示新标记之前删除员工的旧标记。 这是我的代码

<script>
function initMap4(data,id) 

    var map2 = new google.maps.Map(document.getElementById('map2'), 
        zoom: 8,
        center: new google.maps.LatLng(31.1704,72.7097),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      );
         var infowindow = new google.maps.InfoWindow();

         window.setInterval(function()
          $.ajax(
            type: 'POST',
            url: '<?php echo base_url() ?>salesman/get_salesman_by_id',
            data :  id: id,
            success:  function (response) 
            var result = response ;
             update(result);
            
          );
        ,2000);

    function update(data)

               var clicked = false;
               var locations2;
               if(data)
                locations2= JSON.parse(data);
               else
               locations2 = JSON.parse('<?php echo $clocation; ?>');
               

               var locations_array2= [];

              $.each(locations2[0], function( index, value ) 
                 locations_array2.push([
                     value.first_name,
                     value.lat,
                     value.long,
                     value.checkin_time,
                     value.checkout_time,
                 ]);
               );

              locations2=locations_array2;

                   for (i = 0; i < locations2.length; i++)
                   
                                 var currTime = Date.now() - 300000;
                                 var online  = locations2[i][5];

                              var    MyOnlineMarker = 
                                    position: new google.maps.LatLng(locations2[i][1], locations2[i][2]),
                                    map: map2,
                                   ;

                                 if(locations2[i][4] == "" )
                                   marker = new google.maps.Marker(MyOnlineMarker);
                                  else
                                    marker = new google.maps.Marker(
                                    position: new google.maps.LatLng(locations2[i][1], locations2[i][2]),
                                    map: map2,
                                    icon: 'assets/Images/red.png'
                                   );
                                 
               
       

  

</script>

【问题讨论】:

请提供一个minimal reproducible example 来证明您的问题。你的 JSON 是什么样的? 你会只有一个标记吗?或者可能有多个标记?如果是这样,您的 JSON 中是否有标识标记的属性? Google Map v3 auto refresh Markers only的可能重复 update markers without reloading the web page google maps v3 的可能副本 【参考方案1】:

我已经解决了 通过将标记推入数组而不是删除它们

【讨论】:

以上是关于在不加载整个地图的情况下更新谷歌地图中的标记的主要内容,如果未能解决你的问题,请参考以下文章

如何在不点击标记的情况下在 iOS 谷歌地图中显示信息窗口?

如何在不更改用户设置的缩放比例的情况下更新地图标记?

离子框架:不在设备上加载谷歌地图库

如何在不重新加载页面的情况下更新从 firestore 检索到的标记在我的地图上?

移动地图时,在谷歌地图中更新Ajax Json数组中的标记

如何在不使用 Xcode、iPhone 中的谷歌地图的情况下从地址获取纬度和经度