Ruby on rails Gmaps4Rails和geocoder:保持请求客户端不受avid Heroku阻塞的方法
我已经在我的Rails 4应用程序中成功地实现了geocoder和Gmaps4Rails,并采用了我一直在寻找的定制设计。问题是,在RailsCast下使用地理编码器的方式似乎与正常的Heroku设置不兼容,远未得到优化 我的地图为人们显示地点,每个人都可以用自己的最佳地址创建自己的地图 现在我用geocoder gem对这个地方进行地理编码,然后使用纬度和经度来构建标记 有没有办法在my Place模型中只保留地址列,并在每次客户端打开映射时在客户端构建标记?如果是这样的话,如何从Geocoder切换到JavaScript映射创建,以及为什么就我所知,Gmaps4rails和Geocoder不是以这种方式定向的,而是服务器端 我的代码现在相当普通: 模型 看法Ruby on rails Gmaps4Rails和geocoder:保持请求客户端不受avid Heroku阻塞的方法,ruby-on-rails,heroku,client-side,gmaps4rails,google-geocoder,Ruby On Rails,Heroku,Client Side,Gmaps4rails,Google Geocoder,我已经在我的Rails 4应用程序中成功地实现了geocoder和Gmaps4Rails,并采用了我一直在寻找的定制设计。问题是,在RailsCast下使用地理编码器的方式似乎与正常的Heroku设置不兼容,远未得到优化 我的地图为人们显示地点,每个人都可以用自己的最佳地址创建自己的地图 现在我用geocoder gem对这个地方进行地理编码,然后使用纬度和经度来构建标记 有没有办法在my Place模型中只保留地址列,并在每次客户端打开映射时在客户端构建标记?如果是这样的话,如何从Geocod
Gmaps4rails完全是客户端的。但它需要坐标:
class Place < ActiveRecord::Base
geocoded_by :address
after_validation :geocode, if: :address_changed?
def show
@hash = Gmaps4rails.build_markers(@diary.places) do |place, marker|
marker.lat place.latitude
marker.lng place.longitude
marker.json({ title: place.title, id: place.id, category: place.category })
marker.picture({
:url => ActionController::Base.helpers.asset_path(place.category.split(" ").first + ".png"),
:width => 24,
:height => 24
})
marker.infowindow render_to_string(:partial => "/diaries/map/map_box", locals: {place: place})
end
end
<div id="map"></div>
<!-- Contains all js linked to building the Google Map -->
<script src="http://maps.google.com/maps/api/js?v=3.13&sensor=false&libraries=geometry" type="text/javascript"></script>
<script src='http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>
<script type="text/javascript">
$(function(){
handler = Gmaps.build('Google');
handler.buildMap({ provider: {styles: mapStyle}, internal: {id: 'map'}}, function(){
// set marker infos from gmaps4rails ruby @hash built in controller
markers_json = <%= raw @hash.to_json %>;
markers = _.map(markers_json, function(marker_json){
marker = handler.addMarker(marker_json);
_.extend(marker, marker_json);
return marker;
});
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
})
</script>