2016-08-09 103 views
1

我有一個谷歌地圖,顯示在一個頁面上,每個位置上的標記都根據每個位置的狀態使用不同的標記。實時谷歌導航地圖

我想要更新位置時:要爲所有查看它的人重新渲染地圖。這意味着所有的標記都會更新,所以用戶不會看舊的標記指示。

我該如何做到這一點?我試圖使用render_Sync,但顯然render_sync寶石必須單獨加載整個集合。這意味着它會盡可能多地渲染地圖,這會向Google地圖發送太多的請求並導致失敗/中斷它。

回答

1

您的谷歌地圖在您的視圖中通過Javascript調用初始化。您只需要編寫一些方法,在某些時間間隔內重複調用您的控制器或其他REST服務器。每次成功迴應後,您都會更新您的標記位置。

類似的東西:

<script type="text/javascript"> 

var handler = Gmaps.build('Google'); 
var markers = []; 
var once = true; 
$(document).on('rails_admin.dom_ready', function() { 
    handler.buildMap({ provider: {maxZoom: 20, zoom: 15}, internal: {id: 'map'}}, function(){ 
     getMarker(); 
     window.setInterval(getMarker, 5000); 
    }); 

}); 


    function getMarker() { 
     $.post('/api/v1/get_position', 
       { 
        uuid: '<%= @object.uuid %>' 
       }, 
     function (data, status) { 
      handler.removeMarkers(markers); 
      markers = []; 
      markers = handler.addMarkers([ 
       { 
        "lat": data.lat, 
        "lng": data.lng, 
        "infowindow": "<%= @object.name %>" 
       } 
      ]); 
      if (once) { 
       handler.fitMapToBounds(); 
       handler.bounds.extendWith(markers); 
       handler.map.centerOn({ lat: data.lat, lng: data.lng }); 
       once = false; 
      } 
      console.log(data); 
     }); 
    }; 

</script> 


<div style="width: 800px;"> 
    <div id="map" style="width: 800px; height: 600px;"></div> 
</div>