【问题标题】:How to integrate spiderfier js with gmaps4rails gem ? (Multiple markers on same lat,lng )如何将 spiderfier js 与 gmaps4rails gem 集成? (同一 lat,lng 上有多个标记)
【发布时间】:2015-03-16 23:28:10
【问题描述】:

我在尝试将 spiderfier https://github.com/jawj/OverlappingMarkerSpiderfierhttps://github.com/apneadiving/Google-Maps-for-Rails 集成时有点挣扎

在我的 map.html.haml 中:

= gmaps(:markers => {:data => @map, :options => { "rich_marker" => true, :raw => '{ animation: google.maps.Animation.DROP }' } }, :map_options => { :draggable => true, :auto_zoom => false, :zoom => 9, :disableDefaultUI => false, :scrollwheel => true, :disableDoubleClickZoom => true, :custom_infowindow_class => "province" })

- content_for :scripts do
:javascript
    Gmaps.map.infobox = function(boxText) {
        return {
             content: boxText
            ,disableAutoPan: false
            ,maxWidth: 0
            ,pixelOffset: new google.maps.Size(-140, -50)
            ,alignBottom: true
            ,zIndex: 999
            ,hideCloseButton: false
            ,boxStyle: { 
                background: "white"
                ,width: "280px"
                ,padding: "10px"
                ,border: "1px solid #b2b2b2"
                ,arrowStyle: 0
                ,arrowPosition: 50
                ,arrowSize: 20
                 }

            ,infoBoxClearance: new google.maps.Size(10, 10)
            ,isHidden: false
            ,pane: "floatPane"
            ,enableEventPropagation: false

     }};

这很好用,但是如何集成 Spiderfier https://github.com/jawj/OverlappingMarkerSpiderfier#how-to-use

【问题讨论】:

  • 我今天遇到了同样的问题。在此期间您找到解决方案了吗?谢谢
  • 嗨帕特里克,我还没有找到解决方案,如果我找到了,我会在这里发表评论,但幸运的是,客户的优先级并不高。

标签: ruby-on-rails google-maps google-maps-api-3 gmaps4rails


【解决方案1】:

这是一个使用旧版本 Gmaps 4 Rails 的老问题,但是对于有兴趣在其最新版本中使用这两个库的任何人,这里是如何做到的。

这个例子是基于documentation sample code

handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
  markers = handler.addMarkers([
    {
      "lat": 0,
      "lng": 0,
      "picture": {
        "url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
        "width":  36,
        "height": 36
      },
      "infowindow": "hello!"
    }
  ]);
  handler.bounds.extendWith(markers);
  handler.fitMapToBounds();

  // Create a OverlappingMarkerSpiderfier instance
  var oms = new OverlappingMarkerSpiderfier(handler.getMap(), {
    keepSpiderfied: true
    // Other options you need
  });

  // Track each marker with OMS
  _.each(markers, function(marker) {
    oms.addMarker(marker.getServiceObject());
  });
});

这里重要的是深入了解 Gmaps4Rails 封装在其自己的类中的原生 Google 对象。

如果您需要标记上的点击事件,请向oms 添加一个处理程序,如in the doc 所述。

【讨论】:

  • 另外,如果您的客户端无法引用 OMS,请在 OMS 之前加载 google maps API。一个简单的方法是添加 OMS js 文件内联而不是作为标题。
猜你喜欢
  • 2013-04-13
  • 2015-01-05
  • 2018-02-19
  • 2014-04-26
  • 2020-08-13
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多