使用rails将数据填充到Google Map上

时间:2016-12-21 06:08:04

标签: javascript ruby-on-rails google-maps google-maps-markers

我有一个使用Google Maps API查找您所在地区的接机游戏的rails应用。你可以使用Places库创建游戏并设置你想玩的地方(我有点位)。但是,现在我尝试制作它,以便当您单击按钮时,它会占用人们创建的位置并在地图上填充它们。

我有一个带有地址栏的游戏模型,我试图获取该地址信息,并在用户按下按钮时将其弹出地图。

有没有人有关于我如何做到这一点的提示?感谢

1 个答案:

答案 0 :(得分:1)

我会在两个宝石的帮助下接近这个:

gem 'geocoder'
gem 'gmaps4rails'

虽然您当然可以绘制地址,但我喜欢使用'after_save'方法将它们转换为long和lat坐标(您必须在Game模型中添加两​​列)。

class Game < ActiveRecord::Base

  after_save :cache_coordinates

  def cache_coordinates
    loc = Geocoder.coordinates(address)
    return if loc.nil?
    update_column(:latitude,  loc[0])
    update_column(:longitude, loc[1])
  end
end

请务必按照此处列出的说明操作,以使Gmaps正常工作: Google-Maps-for-Rails

您的地图控制器可能看起来像这样(不要忘记添加到路线......)

class MapsController < ApplicationController
  respond_to :html, :js

  def index
    @geolocations = Game.all
    @hash = Gmaps4rails.build_markers(@geolocations) do |geolocation, marker|
      marker.lat geolocation.latitude
      marker.lng geolocation.longitude
    end
  end
end

一个简单的观点是这样的:

// use your API key here...
<%= javascript_include_tag "//maps.google.com/maps/api/js?v=3.23&amp;sensor=false&amp;libraries=geometry&key=YOURKEY" %>
<%= javascript_include_tag "//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js" %>
<script>
    var mapStyle = [];
    var mapOptions = {};
    var handler = Gmaps.build('Google',
            {markers:
            {clusterer: {
                gridSize: 20,
                maxZoom: 13
            }}});
    handler.buildMap({
        internal: {id: 'multi_markers'},
        provider: {
            scrollwheel: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

    }, function(){
        var markers = handler.addMarkers(<%=raw @hash.to_json %>);
        // some options you may or may not want to use
        handler.map.centerOn([40.397, -95.644]);
        handler.fitMapToBounds();
        handler.getMap().setZoom(4)
    });
</script>