0

我有一个基本的markerclusterer示例,效果很好。

var center = new google.maps.LatLng(37.4419, -122.1419);
var options = {
  'zoom': 13,
  'center': center,
  'mapTypeId': google.maps.MapTypeId.ROADMAP
};

var map = new google.maps.Map(document.getElementById("map"), options);

var markers = [];
for (var i = 0; i < 100; i++) {
  var latLng = new google.maps.LatLng(data.photos[i].latitude,
      data.photos[i].longitude);
  var marker = new google.maps.Marker({'position': latLng});
  markers.push(marker);
}
var markerCluster = new MarkerClusterer(map, markers);

我想做的是按国家/地区对标记进行聚类,然后一旦单击它,它们仍然会被聚类,直到再次单击。目前它们是聚集在一起的,直到你得到一个结果。我有数以千计的标记,并希望它们在单击一个国家/地区然后再单击一次后可见。

我在网上寻找解决方案,发现这个http://google-maps-utility-library-v3.googlecode.com/svn/tags/markermanager/1.0/examples/google_northamerica_offices.html

这是用这个产生的

    var officeLayer = [
  {
    "zoom": [0, 3],
    "places": [
      { "name": "US Offices", "icon": ["us", "flag-shadow"], "posn": [40, -97] },
      { "name": "Canadian Offices", "icon": ["ca", "flag-shadow"], "posn": [58, -101] }
    ]
  },
  ...
};

function setupOfficeMarkers() {
  allmarkers.length = 0;
  for (var i in officeLayer) {
    if (officeLayer.hasOwnProperty(i)) {
      var layer = officeLayer[i];

      var markers = [];
      for (var j in layer["places"]) {
        if (layer["places"].hasOwnProperty(j)) {
          var place = layer["places"][j];
          var icon = getIcon(place["icon"]);

          var title = place["name"];
          var posn = new google.maps.LatLng(place["posn"][0], place["posn"][1]);
          var marker = createMarker(posn, title, getIcon(place["icon"]));
          markers.push(marker);
          allmarkers.push(marker);
        }
      }
      mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
    }

  }
  mgr.refresh();
  updateStatus(mgr.getMarkerCount(map.getZoom()));
}

我不确定如何将它实现到我目前拥有的东西中,以及是否还需要包含任何其他脚本/库。

4

1 回答 1

0

您正在那里查看两个完全不同的库。您的问题是关于MarkerClusterer图书馆的,但您的示例解决方案是关于MarkerManager图书馆的。

MarkerClusterer库根据一种算法自动将标记聚集在一起,该算法试图确定标记何时会如此靠近以至于您无法从视觉上区分一个与另一个。您并不能真正控制何时以及如何决定以这种方式将标记合并在一起,所以这个库是一个想法,当它们如何合并对您无关紧要时,只要合并发生。由于您想通过政治边界(国家)而不是彼此接近来将标记合并在一起,所以这不适合您。

MarkerManager库根本不会自动将标记合并在一起。它所做的是根据当前地图视口的缩放级别有选择地隐藏和显示标记。您需要做的是自己进行合并,然后添加到MarkerManager所有合并的标记、细节标记以及您希望每个标记可见的缩放级别。进行自己的合并意味着您需要另一种方法来确定每个标记点属于哪个国家/地区。希望您已经知道(或可以获得)该信息,因为这些库中的任何一个都不会自动提供这些信息。

tl; dr - 使用MarkerManager图书馆而不是MarkerClusterer图书馆按国家分组,由您来确定每个国家的位置以及哪个标记与哪个标记一起使用。

于 2014-05-06T19:05:59.053 回答