2

我正在使用 MarkerManager v3 和谷歌地图来显示很多标记。现在一切都很完美,但我似乎无法找到一种方法来只显示标记管理器正在显示的标记。我知道 getMarkerCount 方法返回缩放中可见标记的数量,但我需要来自 id、title 等标记的信息来更新包含 dragend-event 上的点的表。

我试过了

    google.maps.event.addListener(map, "dragend", function() {
        for(var i = gMarkers.length, bounds = map.getBounds(); i--;) {
            if( bounds.contains(gMarkers[i].getPosition()) ){
                console.log(gMarkers[i].getVisible());
            }
        }
    });

此方法返回所有标记,即使它们在当前缩放级别不可见?知道如何实现这一目标吗?

更准确地说,请参阅我的测试站点http://frankmyhre.dk/mapping/test.php,其中表格应反映边界内地图上可见的标记(红色图标)

4

1 回答 1

1

我认为我的解决方案“又快又脏”。我认为它应该是可行的,通过使用插件。

无论如何,我认为结果是您所需要的。我展示的代码在里面初始化;1 个额外功能和 zoom_changed 和 dragend 的替换

google.maps.event.addListener(map, "zoom_changed",function() {
  var zoom = map.getZoom();
  $('#zoom').text(zoom);
  $('#marker_count').text(mgr.getMarkerCount(zoom));
  timer = setTimeout(visibleMarkersInTable, 400);
});
google.maps.event.addListener(map, "dragend", function() {
  timer = setTimeout(visibleMarkersInTable, 400);
});
var timer; 
function visibleMarkersInTable () {
  clearTimeout(timer);  // make sure you don't check, while the user is panning or zooming.; so this blocks a lot of temporary checks
  $('table tbody').empty();
  for (i in gMarkers) {
    var markerVisible = gMarkers[i].map ? true : false;
    if(markerVisible) {
      // mind you, the marker might be on the map, but just outside of the boundaries.
      // so let's check those
      if (map.getBounds().contains(gMarkers[i].getPosition()) ) {
        $('table tbody').append('<tr id="' + gMarkers[i].id + '"><td>' + gMarkers[i].title + '</td><td>' + gMarkers[i].getPosition().lat() + '</td><td>' + gMarkers[i].getPosition().lng() + '</td></tr>');
      }
    }
  }
}

随意篡改 setTimeout 中的 400 毫秒延迟;将其设置为适合您的任何内容。尤其是当您有数百个标记时。不知道这会变得多慢。

于 2015-07-02T14:27:38.017 回答