我正在使用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
答案 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)