2013-03-30 2 views
0

Я работаю с камнем gmaps4rails (версия 1.5.6), и хочу добавить возможность добавлять больше полилиний на карту, а не заменять уже существующие Полилинии. На github этот код доступен для просмотра here.Как добавить функцию addPolylines в gmaps4rails?

Эта функция уже существует для Markers: Gmaps.map.replaceMarkers(your_markers_json_array);Gmaps.map.addMarkers(your_markers_json_array);.

маркеры функция, как представляется, изложены в двух местах:

1) В gmaps4rails.base.js как:

Gmaps4Rails.prototype.addMarkers = function(new_markers) { 
    this.markers = this.markers.concat(new_markers); 
    this.create_markers(); 
    return this.adjustMapToBounds(); 
}; 

2) В gmaps4rails.base.js.coffee как:

#add new markers to on an existing map 
    addMarkers : (new_markers, adjustBounds = true) -> 
    #update the list of markers to take into account 
    @markers = @markers.concat(new_markers) 
    #put markers on the map 
    @create_markers() 
    @adjustMapToBounds() if adjustBounds 

я полагал, что мог работайте с кодом replacePolylines, чтобы сделать мой собственный addPolylines звонок:

1) В gmaps4rails.base.js возле replacePolylines код, как:

Gmaps4Rails.prototype.addPolylines = function(new_polylines) { 
    this.polylines = this.polylines.concat(new_polylines); 
    this.create_polylines(); 
    return this.adjustMapToBounds(); 
}; 

2) В gmaps4rails.base.js.coffee возле replacePolylines код, как:

#add new polylines to on an existing map 
    addPolylines : (new_polylines) -> 
    #update the list of polylines to take into account 
    @polylines = @polylines.concat(new_polylines) 
    #put polylines on the map 
    @create_polylines() 
    #.... and adjust map boundaries 
    @adjustMapToBounds() 

Я сделал эти изменения в драгоценный камень, который уже добавил к моему Rails, и я перезапустил мой сервер Rails. Я называю это так же, как я называю replacePolylines, с Gmaps.map.addPolylines(your_polylines_json_array);. Он вызывает ошибку в консоли: Uncaught TypeError: Object #<Gmaps4RailsGoogle> has no method 'addPolylines'.

В проекте gmaps4rails нет ничего другого, где я должен что-либо сделать для своего вызова addPolylines, но я, очевидно, ничего не делаю правильно. Может ли кто-нибудь объяснить, что мне нужно сделать, чтобы заставить это работать на основе этой информации?

ответ

1

В качестве временного решения, пока я не могу понять, как построить функциональность в себя gmaps4rails, я принял эти меры, чтобы асинхронно загружать полилинии на карту ...

В моих UsersController, я установил вверх по show действий, чтобы создать пустой @polylines_json набор:

def show 
    @user = User.find(params[:id]) 
    @polylines_json = {} 
end 

идея заключается в том, чтобы иметь ничего для gmaps4rails, чтобы отобразить на его начальной загрузке карты, так что первоначальное отображение страницы как можно быстрее. По мнению, я загружаю карту с этой линией:

<%= gmaps(:polylines => { :data => @polylines_json }, :map_options => { :type => 'HYBRID', :zoom => 12, :auto_adjust => false, :center_latitude => "-77", :center_longitude => "21" }) %> 

Назад в UsersController, у меня есть настраиваемое действие maps, который настроен для обработки запросов, которые содержат JSon from и to параметров (так что я могу найти элементы в определенных диапазонах).Именно в этом действии, что я в здании фактические данные полилинию JSon на основе from/to параметров:

def items 
    items = items.find(:all, :conditions => ['id >= ? AND id <= ?', params[:from], params[:to]]) 

    polyline = [] 
    i=0 
    items.each do |item| 
    polyline[i] = [] 
    polyline[i] += [{:lng=>item.longitude.to_f,:lat=>item.latitude.to_f}] 
    i += 1 
    end 
    @polylines_json = polyline.to_json 

    respond_to do |format| 
    format.json { render json: @polylines_json } 
    end 
end 

Наконец, еще в целях свести все это вместе, я асинхронно создания коллекции полилиний по десять раз за каждый раз, пока я не извлечу их из базы данных:

<% content_for :scripts do %> 
    <script type="text/javascript" charset="utf-8"> 
    numberOfItems = <%= @user.items.count %>; 
    var polylines= []; 
    function LoadMap(from, to) { 
     if (to < numberOfItems){ 
     nextFrom = to + 1; 
     nextTo = to + 10; 
     } 
     if(nextTo <= numberOfItems){ 
     $.ajax({ 
      dataType: 'json', 
      url: "http://<%= request.host %>/users/<%= @user.id %>/maps.json?from="+from+"&to="+to, 
      success: function(response) { 
      polylines = polylines.concat(response); 
      Gmaps.map.replacePolylines(polylines); 
      LoadMap(nextFrom, nextTo); 
      } 
     }); 
     } 
    } 
    LoadMap(1,10); 
    </script> 
<% end %> 
Смежные вопросы