0

非常にうまく機能する基本的なマーカークラスターの例があります。

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);

私がやりたいのは、国ごとにマーカーをクラスター化し、それをクリックすると、さらに3回クリックするまでクラスター化されたままになります。現在、それらは 1 つの結果になるまでクラスター化されています。何千ものマーカーがあり、国を 1 回クリックしてからもう 1 回クリックすると表示されるようにしたいと考えています。

私はオンラインで解決策を探し、これを見つけました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

そこには、まったく異なる 2 つのライブラリが表示されています。あなたの質問はMarkerClustererライブラリに関するものですが、解決策の例はMarkerManagerライブラリに関するものです。

ライブラリはMarkerClusterer、マーカー同士が接近しすぎて互いに区別できない場合を判断しようとするアルゴリズムに基づいて、マーカーを自動的にまとめます。このようにマーカーをマージするタイミングと方法を実際に制御することはできないため、このライブラリは、マージが行われる限り、マーカーがどのようにマージされるかが重要でない場合に役立ちます。マーカーをお互いの近さではなく、政治的境界 (国) によってマージしたいので、これはあなたのためのライブラリではありません。

ライブラリは、MarkerManagerマーカーを自動的にマージしません。現在のマップ ビューポートのズーム レベルに基づいて、マーカーを選択的に非表示または表示します。独自のマージを行い、マージされたMarkerManagerすべてのマーカー、詳細マーカー、および各マーカーを表示するズーム レベルに追加する必要があります。独自のマージを行うということは、各マーカー ポイントが属する国を特定する別の方法が必要になることを意味します。この情報は、これらのライブラリによって自動的に提供されるわけではないため、既にご存じ (または取得できる) ことを願っています。

tl;dr -国ごとにグループ化するためにMarkerManagerライブラリではなくライブラリを使用します。MarkerClusterer各国の場所と、どのマーカーがどの国に対応するかを特定するのはあなた次第です。

于 2014-05-06T19:05:59.053 に答える