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