ここにある Google Maps API v3 の重複マーカー Spiderfier を使用しようとしています。(私の質問は、このテキスト/コードのブロックの一番下にあります)
https://github.com/jawj/OverlappingMarkerSpiderfier/blob/master/README.textile
私が実装しようとしているページは、彼らがソース コード ページで使用しているコードとは少し異なります。ページを初期化し、すべての関数呼び出しを初期化関数内に実装します。マイページは地図を初期化して 1 つのポイントを読み込み、後で別の機能を使用して (ジオコーディングにより) ポイントを追加します。
基本的に、この時点でマップは初期化されています。今度はデータベースを呼び出して、追加する新しい場所を取得します。
var cityArray= <?php echo json_encode($cityArray); ?>; //get the city
var title = <?php echo json_encode($title); ?>; //and the title to go on it's infowindow
function plotMarkers(){
for(var i = 0; i < <?php echo json_encode($length); ?>; i++){
codeAddresses(cityArray[i],title[i]); //geocode the address
}
}
したがって、上のこのスニペットからは 2 つの配列が得られます。1 つは場所、もう 1 つは情報ウィンドウに表示されるタイトルです。の
ここで、住所をジオコーディングし、そのマーカーをマップに追加する codeAddresses 関数を示します。plotMarkers 関数からわかるように、配列はループ処理され、codeAddresses 関数に追加されます。
function codeAddresses(address,title){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
google.maps.event.addListener(marker, 'click', (function(marker) {
return function() {
infowindow.setContent(title);
infowindow.open(map, marker);
}
})(marker));
}
});
}
私の質問は、最初のポイントをロードする最初の関数にリスナー (上記のリンク先のページ) を追加するか、それとも codeAddresses 関数に追加する必要があるかということです。
また、これを codeAddresses 関数または他の場所に含める必要がありますか? それが codeAddresses に含まれる場合、codeAddresses はループからトリガーされる (そして反復ごとに実行される) ため、for ループを取り除くことができるということですか?
for (var i = 0; i < window.mapData.length; i ++) {
var datum = window.mapData[i];
var loc = new gm.LatLng(datum.lat, datum.lon);
var marker = new gm.Marker({
position: loc,
title: datum.h,
map: map
});
marker.desc = datum.d;
oms.addMarker(marker); // <-- here
}