Google マップには、同じ場所にある複数のマーカーを分割する方法はありません。これは、アパートの建物や専門サービスの建物など、複数の居住場所にいる人や企業で発生する可能性があります。ズーム レベルによっては、ショッピング モールなどでも発生する可能性があります。
それを回避する方法は、それらを「スパイダー化」することです。最初にクリックすると、その場所への線でそれらが分割されます。これは Google Earth で行われ、George MacKerron は Google Maps でそれを行うためのパッケージを書きました。( https://github.com/jawj/OverlappingMarkerSpiderfier )
これは、markerclusterer と統合できますが、marker clusterer によるマーカーのバッチ作成はサポートしていません。
私の問題は、私が取り組んでいるアプリケーションが、さまざまな種類のアクティビティに対して特定のアイコンを持ちたいということです。Spiderfier はマーカーの 1 つを上に置きます。マップを見ている人は、一番上のマーカーの下に 10 個以上のマーカーがある可能性があることを知る方法がありません。
理想的には、markercluster に別のアイコンに似た複数のマーカーがある場合に表示されるトップ マーカーを配置する方法があるでしょう。Spiderfier は、それらが近くにあるが正確に同じ場所 (デフォルトは 20 ピクセル) にない場合にも機能し、markercluster には正確に同じ場所にある複数のマーカーにアクセスするための準備がないため、直接の 1 対 1 ではありません。
理想的な動作は、クリックするとスパイダー化された個々のアイコンに割り込む、スパイダー用の特別なアイコンを持つことです。markerclusterer に似ていますが、ズームの変更がなく、同じ場所を処理します。特別なアイコンは、理想的には、markerclusterer のように、その場所にある他のマーカーの数を示します。特別なアイコンは非表示にするか、Spiderfied グループの一部にすることができます。
一部の宿泊施設がなければ、ユーザーはその場所に複数のアクティビティがあることを知る方法がありません。別のアクティビティ マーカーが表示されているため、必要なアクティビティがその場所にないと想定することさえあります。
これは問題のあるプランカーです: http://plnkr.co/edit/vimZNq?p=info
var markers = [];
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < 100; ++i) {
var latLng = new google.maps.LatLng(Math.floor(Math.random() * 10) / 10 + 39,
Math.floor(Math.random() * 10) / 10 - 100);
var marker = new google.maps.Marker({
position: latLng,
title: "marker " + i + " pos: " + latLng,
maxZoom: 8,
map: map
});
marker.desc = marker.getTitle();
bounds.extend(latLng);
markers.push(marker);
oms.addMarker(marker);
}
map.fitBounds(bounds);
var markerCluster = new MarkerClusterer(map, markers);
ご協力いただきありがとうございます、
デビッド