我想问一下哪个是将google地图集成到ruby on rails应用程序的最佳解决方案.特定的宝石是值得的还是我们应该为它写自己的观点?
感谢您的任何意见.
我是一个完整的菜鸟,建立我的第一个rails应用程序.我使用youtube上的apneadiving教程成功实现了Google-maps-for-rails V2:http://www.youtube.com/watch?v = R0l-7en3dUw&feature = youtu.be
我的问题是,对于我的每张地图,我只显示一个标记,当地图加载时,它会调整为完全缩放.
搜索周围,似乎有很多早期版本的Gmaps4rails解决方案,但对于V2,并通过javascript创建地图,我似乎无法找到一个有效的解决方案.
作为参考,我的代码如下:
视图:
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
}); </script>
Run Code Online (Sandbox Code Playgroud)
控制器:
def show
@pins = Pin.find(params[:id])
@hash = Gmaps4rails.build_markers(@pins) do |pin, marker|
marker.lat pin.latitude
marker.lng pin.longitude
end
end
Run Code Online (Sandbox Code Playgroud)
我试图通过控制台使用:gmap.setzoom(12)进行更改,正如某些帖子所建议的那样,但是没有任何运气.
任何帮助深表感谢
对我有用的答案:将视图更改为:
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
handler.getMap().setZoom(12);
}); </script>
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
出于某种原因,我的变焦条都是像素化的,我不知道为什么.有任何想法吗?我使用了基本设置:
Controller: @json = User.all.to_gmaps4rails
View: <%= gmaps4rails(@json) %>
Run Code Online (Sandbox Code Playgroud)
我没有传递任何特殊参数或任何东西.我模特身上的标记显示得很漂亮.


有一种简单的方法以编程方式滚动谷歌地图的x像素?
我只能考虑使用setCenter,但问题是我必须根据缩放级别计算新位置(lat/lng)...
你能想到别的吗?告诉我,如果您对此非常肯定,使用Google Map API是不可能的.
ps:我正在使用Gmaps4rails,所以如果你能想到用宝石做到这一点的方法,它会很酷.(比如将边界调整为地图的子集.)因为最终我的目标是阻止菜单隐藏一些标记.我需要更改地图的视口,如果这是有意义的,那么它使标记适合橙色区域,而不是完整的地图.

解:
@Shane Best,很棒,这个想法很完美,但我认为你的解决方案适用于Google API v2,对吗?这是我为V3做的:
var point = map.getCenter();
var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);
var projection = overlay.getProjection();
var pixelpoint = projection.fromLatLngToDivPixel(point);
pixelpoint.x += my_value; # or .y
point = projection.fromDivPixelToLatLng(pixelpoint);
map.setCenter(point);
Run Code Online (Sandbox Code Playgroud)
如果有人知道有关API v3的更好的解决方案,请告诉我们.
我有一张我在rails中使用google maps for rails gem创建的地图.它适用于Chrome和Safari,但它不会在Firefox 29中显示自定义.svg标记.它会显示群集的自定义图像(这是一个png).
我已经碰到了很久以来的一些主题(FF 8和9),它说有一个问题在9或10中与cors有关.然而,它似乎暂时不是一个问题,特别是对于29.
有谁知道这是一个firefox问题还是google maps for rails gem问题?如果它是一个什么是解决方案.
更新: 为png交换svg现在正常工作.然而,这并不能解决潜在的问题.我想使用svg,所以我可以传入颜色变量.
仍然没有运气,chrome和firefox都显示该图像正在开发人员工具中下载.图像目录中的firefox和chrome中可以查看该图像.以下是我的SVG的代码:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="20px" y="20px"
viewBox="0 0 15 15" enable-background="new 0 0 15 15" xml:space="preserve">
<circle fill="#45A6DD" cx="7.5" cy="7.5" r="5.6"/>
</svg>
Run Code Online (Sandbox Code Playgroud) 阅读gmaps4rails gem文档,我没有找到任何设置地图宽度和高度的方法.有没有办法做到这一点?
我正在使用gmaps4rails在"客户端"显示页面上加载地图.我已经集成了turbolinks以使应用程序更加一致,但是现在我遇到了一个问题,我必须刷新页面以显示地图的地图.我得到的只是一个空白的地图框架.刷新页面时,地图会正确显示.
我尝试添加gem'jquery-turbolinks',但问题仍然存在.
在视图中:
<%= gmaps("map_options" => {:container_class => "map_container_renamed", "zoom" => 15, "auto_zoom" => false},"markers" => { "data" => @json }) %>
Run Code Online (Sandbox Code Playgroud)
在application.js中
//= require jquery
//= require turbolinks
//= require jquery.turbolinks
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
其中,地图是空白页面源代码的要点在这里.
我的目标是添加圆圈代替标记,以显示工具模型中每个工具的位置的一般区域.我能够根据SO上的其他答案添加圈子,但是使用以下代码我在这个问题的标题中得到错误.
在我的控制器中:
def index
@tools = Tool.all
@json=Tool.all.to_gmaps4rails
@circles = Tool.all{|t| {:longitude => t.longitude, :latitude => t.latitude, :radius =>"1000" }}.to_json
respond_to do |format|
format.html # index.html.erb
format.json { render json: @tools }
end
end
Run Code Online (Sandbox Code Playgroud)
在我的视图文件中:
<%= gmaps({ "markers" => {"data" => @circles}, "circles" => { "data" => @circles} } ) %>
Run Code Online (Sandbox Code Playgroud)
JavaScript错误会将我引导至gmaps4rails.googlemaps.js文件中的第401行:
this.boundsObject.extend(circle.serviceObject.getBounds().getNorthEast());
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
def home
letter = 'A'
@markers = Location.all.to_gmaps4rails do |loc, marker|
marker.infowindow render_to_string(partial: '/locations/info',
locals: {object: loc})
marker.picture({picture: "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{letter.next!}|9966FF|000000",
width: 32,
height: 32,
shadow_picture: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
shadow_width: 110,
shadow_height: 110,
shadow_anchor: [17,36]})
marker.title "Title - #{loc.name}"
marker.sidebar render_to_string(partial: '/locations/sidebar',
locals: {object: loc})
marker.json({id: loc.id})
end
end
Run Code Online (Sandbox Code Playgroud)
酷的东西.这样可行.它循环通过do loop并递增字母.问题是,它从B开始.我尝试letter在图片中使用,然后在最后使用letter.next!,甚至letter = letter.next,但gmaps向我抛出错误.
有没有办法将"A"之外的东西分配给letter?
当我运行涉及启用了gmaps4rails的模型的rake任务时,我得到了这个错误,如果我对模型进行评论,那么它就不是acts_as_gmappable,而是正确完成.
enter code here
troy$ rake populate:scans --trace
** Invoke populate:scans (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute populate:scans
http://goo.gl/fb/977ze
Sat, 16 Jul 2011 19:43:59 GMT
47.676506
-122.121872
91df0f32209c5212XXXXXXXXXXXXXXX
rake aborted!
undefined method `gmaps' for #<Scan:0x000001051fb9a8>
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activemodel-3.0.9/lib/active_model/attribute_methods.rb:392:in `method_missing'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/attribute_methods.rb:46:in `method_missing'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/gmaps4rails-0.9.1/lib/gmaps4rails/acts_as_gmappable.rb:12:in `process_geocoding'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.9/lib/active_support/callbacks.rb:415:in `_run_validate_callbacks'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activemodel-3.0.9/lib/active_model/validations.rb:212:in `run_validations!'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activemodel-3.0.9/lib/active_model/validations/callbacks.rb:67:in `block in run_validations!'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.9/lib/active_support/callbacks.rb:414:in `_run_validation_callbacks'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activemodel-3.0.9/lib/active_model/validations/callbacks.rb:67:in `run_validations!'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activemodel-3.0.9/lib/active_model/validations.rb:179:in `valid?'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/validations.rb:55:in `valid?'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/validations.rb:75:in `perform_validations'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/validations.rb:43:in `save'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/attribute_methods/dirty.rb:21:in `save'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/transactions.rb:240:in `block (2 levels) in save'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/transactions.rb:292:in `block in with_transaction_returning_status'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
/Users/troy/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.9/lib/active_record/transactions.rb:207:in …Run Code Online (Sandbox Code Playgroud)