2012-03-17 13 views
0

Googleマップに複数のKMLレイヤーを描画するforループを作成しました。その後、各KMLポリラインに単一のインフォウィドウを追加することを目指しています。各行にinfowindowを表示させることができますが、それらのすべてが同じコンテンツを持っています:最後に描いたKMLファイルのURL。多くのGoogle Mapsインフォウィズドウで複数のKMLレイヤーを作成する

function initmap(urls){ 
// Creating an option object for the map 
var myLatlng = new google.maps.LatLng(61.130298, 24.009358); 
var options = { 
zoom: 7, 
center: myLatlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
// Initializing the map 
var map = new google.maps.Map(document.getElementById('map_canvas'), options); 

if(urls != null) { 

    var ctaLayer = new Array(); 
    var url = new Array(); 

    for(var i=0;i<urls.length;i++) { 
     url[i] = urls[i]; 
     url[i] = url[i]+"?dummy="+(new Date()).getTime(); 

     ctaLayer[i] = new google.maps.KmlLayer(url[i], {suppressInfoWindows: true}); 
     ctaLayer[i].setMap(map); 

     // Creating an InfoWindow object 
     var infowindow = new google.maps.InfoWindow({content: url[i]}); 

     google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) { 

      var clickPos = kmlEvent.latLng; 
      var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng()); 

      infowindow.close(); 
      infowindow.setPosition(posX); 
      infowindow.open(map); 
     }); 
    } 
} 
} 

は私が間違って何をやっている:

ここでは、コードですか?

これを行うと(情報ウィンドウを配列に追加すると)、KMLをクリックしてもInfoWindowsは表示されません。

var infowindow = new Array(); 
infowindow[i] = new google.maps.InfoWindow({ 
    content: urls[i] 
}); 

google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) { 

var clickPos = kmlEvent.latLng; 
var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng()); 

infowindow[i].close(); 
infowindow[i].setPosition(posX); 
infowindow[i].open(map); 

});

+0

情報ウィンドウの質問に加えて、追加のDateパラメータをKML URLに追加しないでください。 KmlLayerインフラストラクチャのキャッシング機能を削除するだけで、地図の読み込み速度が向上し、最適なケースが実現されます。 KMLが頻繁に更新される場合は、代わりにexpiresヘッダーを設定してください。 – jlivni

答えて

0

一度に1つのインフォウィンドウだけを表示したいとします。 (あなたのクリックイベントにはinfoWindow.close()があります)この行からcontent:オプションを削除する必要があります。

var infowindow = new google.maps.InfoWindow({content: url[i]}); 

そして、あなたのaddListener機能に追加置く:さらに良い

var infoWindow = new google.map.InfoWindow(); 
    .... 
google.maps.event.addListener(ctaLayer[i], 'click', function(kmlEvent) { 

      var clickPos = kmlEvent.latLng; 
      var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng()); 

      infowindow.close(); 
      infowindow.setPosition(posX); 
      infoWindow.setContent(url[i]); 
      infowindow.open(map); 
     }); 

、すべてのあなたのeventHandlersで使用するためにグローバルとして情報ウィンドウを作成します。

関連する問題