【问题标题】:Google Maps and Rails 3谷歌地图和 Rails 3
【发布时间】:2011-04-02 05:15:05
【问题描述】:

我以前在 rails 2.3x 上使用 geokit 和 y4mr-gm 构建了一个应用程序。

我现在正在构建一个应用程序和 Rails 3,并想知道是否有更好的解决方案。

基本上,我有一个具有地址的模型业务。当用户搜索或浏览商家时,我希望在底部有一张地图,其中显示每个商家的标记。

我可以通过 geokit 和 y4mr-gm 做到这一点(尽管我听说 Rails 3 可能会出现一些问题),但我希望有一个更优雅的解决方案。最近有什么我可以使用的吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 google-maps geolocation


    【解决方案1】:

    我对@9​​87654321@ 非常满意。它的积极维护和非常简单。在保存模型之前,我要求提供街道地址并让地理编码器填写 lat/lng 字段。实施起来真的很轻松。

    说到在地图上显示这些东西,我仍然在自己编写 JS,但使用 jQuery 来完成。如果您正在寻找带有 jQ​​uery 的 JS 的工作示例,您可以查看我的 here

    【讨论】:

    • 你提到的 jQuery 的 JS 还有吗,我很有趣...谢谢。
    【解决方案2】:

    我会说把插件搞砸了,直接使用 Google Maps API v3 中的 javascript...它真的没有那么多代码,而且 G 有非常准确的地理编码器。只需在你的视图中创建一个业务的 js 数组,并使用一些 js 来加载地图和标记。

    未经测试的代码,但应该非常接近:

    <script type="text/javascript">
    addresses = [];
    <% @businessses.each do |biz| %>
      addresses.push('<%=biz.address%>');
    <% end %>
    
    function renderYoMap(addresses){
      var gmapOptions = {
        zoom: 12,
        center: new google.maps.LatLng(38,-97),  //near the middle of the US
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      // initialize the map with your options
      gmap = new google.maps.Map(document.getElementById("map_canvas"),gmapOptions);
    
      // probably want to recenter on the first marker, so lets use a flag
      recentered = false;
    
      //iterate through your addresses
      for (i in addresses) {
        address = addresses[i];
        geocoder = new google.maps.Geocoder();
        //geocode it to get marker position
        geocoder.geocode( { 'address': address }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          lat = results[0].geometry.location.lat();
          lng = results[0].geometry.location.lng();
          position = new google.maps.LatLng(lat,lng);
          markerOptions = {
            map: gmap,
            position: position
          };
          //create your marker on the map
          new google.maps.Marker(markerOptions);
    
          //recenter that thang if it hasnt been already
          if (!recentered){
            gmap.setCenter(position);
            recentered = true;
          }
        }
      }
    }
    
    renderYoMap(businesses);
    </script>
    

    当然,您可以变得更高级,但这应该会为您提供您正在寻找的基本功能。谷歌地理编码器的限制是每天 1000 个,但那是客户端,所以这应该不是问题。

    【讨论】:

      【解决方案3】:

      这是你应该检查的一个:

      https://github.com/apneadiving/Google-Maps-for-Rails

      【讨论】:

        【解决方案4】:

        嗯,你有几个选择,ruby tool box 可以提供帮助,但它看起来不是最新的。

        我建议https://github.com/joshuamiller/cartographer

        Cartographer 生成无痛的 Google Rails 应用程序的地图。它 支持 Google Maps API v3 & 自带 与所有的好东西(MarkerManager && MarkerClusterer) 用于管理大型 最省力的标记数。

        玩得开心

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多