0

ここにある 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
}
4

1 に答える 1

2

最善の方法は、(ジオコーディング Web サービスを使用して) オフラインで住所をジオコーディングし、データベースに座標を保存してから、それらを使用してマーカーを表示することです。クォータ。

于 2012-07-19T23:56:39.580 に答える