更改缩放会导致所有隐藏标记重新显示在Google地图上(Gmaps4rails)

时间:2014-02-11 12:49:45

标签: javascript jquery ruby-on-rails google-maps gmaps4rails

我正在使用Gmaps4rails gem在一个中心位置周围构建地图。我使用复选框允许用户显示/隐藏附近的地点标记,餐馆,学校等。问题是,如果我显示一个类别,然后再次隐藏它,然后放大或缩小,这些标记将重新出现,即使他们以前曾被隐藏过。

我的问题类似于this问题,但我无法解决它。我想知道是否有其他人可以告诉我哪里出错了。我的CoffeeScript如下。

google_map1_handler = null
google_map1_markers = []

$ ->

  $('#map-tab').click (e) ->
    unless google_map1_handler?
      markers_data = $('#map1').data('markers')
      markers = []
      handler = Gmaps.build('Google', { markers: { maxRandomDistance: null } })

      handler.buildMap { provider: { zoom: 15 }, internal: {id: 'map1'} }, ->
        $.each markers_data, (i, marker) ->
          if marker.type == 'Property'
            markers.push handler.addMarker( marker )
            handler.map.centerOn({ lat: marker['lat'], lng: marker['lng'] })

        $('.map-checkbox').prop('checked', false)

      google_map1_handler = handler
      google_map1_markers = markers


  # Hide and show map markers with key checkboxes
  $('.map-checkbox').click (e) ->
    keywords = []
    $('.map-checkbox').each (i, el) ->
      keywords.push el.id if el.checked == true

    toggleMapMarkers(keywords)


  toggleMapMarkers = (keywords) ->
    markers_data = $('#map1').data('markers')
    handler = google_map1_handler
    markers = google_map1_markers

    # clear old markers
    _.each markers, (marker, i) ->
      marker.setMap(null)
    markers.length = 0

    _.each markers_data, (marker, i) ->
      if marker.type == 'Property' or marker.type in keywords
        markers.push handler.addMarker(marker)

    google_map1_markers = markers

1 个答案:

答案 0 :(得分:2)

基本上,当您使用群集器时,它会存储所有标记。

  • 缩小时,会将地图设置为null并添加群集图片。

  • 放大时会删除群集图片并在标记中再次设置地图。

所以,当你执行marker.setMap(null)时,这还不够:你必须从群集器中删除标记!

_.each markers, (marker, i) ->
  marker.setMap(null)
  handler.clusterer.removeMarker(marker)

但我也需要这种情况,所以就这样做:

_.each markers, (marker, i) ->
  handler.removeMarker(marker)

甚至:

handler.removeMarkers(markers)