2016-08-09 8 views
1

私はページに表示されるGoogleマップを持っています。それぞれの位置にマーカーが付いていて、それぞれの位置のステータスに基づいて異なるマーカーが付いています。リアルタイムGoogleマップinレール

場所が更新されたときに、地図を表示しているすべてのユーザーが再レンダリングするマップが必要です。これは、すべてのマーカーが更新されることを意味し、ユーザーは古いマーカー標識を見ることはありません。

どうすればこの問題を解決できますか?私はrender_Syncを使用しようとしましたが、明らかにrender_sync gemはコレクション全体を別々にロードする必要があります。つまり、Googleマップに送信するリクエストが多すぎて失敗/中断することがあります。

答えて

1

あなたのGoogleマップは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> 
関連する問題