2012-03-17 2 views
0

Google지도에 여러 개의 KML 레이어를 그리는 for-loop를 만들었습니다. 그 후에 각 KML 폴리 라인에 하나의 infoWindow를 추가하려고합니다. 각 줄마다 정보창을 표시 할 수 있지만 모두 같은 내용을 가지고 있습니다. 즉, 내가 그린 마지막 KML 파일의 URL입니다.많은 Google지도 정보창을 사용하여 여러 개의 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을 클릭해도 InfoWindow가 표시되지 않습니다.

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

정보 창문 외에도 KML URL에 추가로 Date 매개 변수를 추가하면 안된다는 점을 지적해야합니다. KmlLayer 인프라의 캐싱 기능을 제거하면지도가 더 느리고 최상의 경우에로드됩니다. KML이 자주 업데이트되는 경우 expires 헤더를 대신 설정하십시오. – jlivni

답변

0

한 번에 하나의 infoWindow 만 표시한다고 가정합니다. (클릭 이벤트에는 infoWindow.close()가 있습니다.이 줄에서 content : 옵션을 제거해야합니다.

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에서 사용할 전역으로 정보창을 만듭니다

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

그리고 당신의 addListener 기능에 추가했습니다.

관련 문제