我正在使用gmaps4rails gem(版本1.5.6),我希望添加向地图添加更多折线而不是替换已存在的折线的功能。在github上,此代码可以查看here。
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)在replacePolylines
代码附近的gmaps4rails.base.js中:
Gmaps4Rails.prototype.addPolylines = function(new_polylines) {
this.polylines = this.polylines.concat(new_polylines);
this.create_polylines();
return this.adjustMapToBounds();
};
2)在replacePolylines
代码附近的gmaps4rails.base.js.coffee中:
#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项目中的gem进行了这些更改,并且我重新启动了我的Rails服务器。我将其称为replacePolylines
与Gmaps.map.addPolylines(your_polylines_json_array);
相同的方式。它在控制台中产生错误:Uncaught TypeError: Object #<Gmaps4RailsGoogle> has no method 'addPolylines'
。
在gmaps4rails项目中似乎没有任何其他地方我必须为addPolylines
电话做任何事情,但我显然没有做正确的事情。根据这些信息,任何人都可以解释我需要做些什么来实现这个目标吗?
答案 0 :(得分:1)
作为一种解决方法,在我能够弄清楚如何在gmaps4rails本身中构建功能之前,我已采取这些措施将Polylines异步加载到地图上......
在我的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
,用于处理包含from
和to
参数的json请求(以便我可以找到特定范围内的项目)。我正在根据from
/ to
参数构建实际的Polyline json数据:
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
最后,回到视图中将它们整合在一起,我一次异步地构建Polyline集合,直到我从数据库中检索它们:
<% 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 %>