2012-08-14 80 views
0

我需要在彈出當有人點擊折線形成許多可用的信息窗口顯示不同的數據不同的信息寡婦,信息與折線谷歌地圖API V3

我看過的很多方案來解決這個這裏是我一個例子來翻過,

Google Maps API - Trouble with Arrays and InfoWindows

但是這種解決方案似乎並沒有爲我工作,它不會顯示信息窗口時,我在一個折線點擊。請幫助我對此...我使用了不同的代碼,它只顯示數組的最後一個元素..我做的是我通過for loop.please添加多段線來幫助我..這是我的代碼,

var map; 
    var polylinesIn = []; 
    var infowindow = new google.maps.InfoWindow(); 
    var infowindowArray = []; 
    function initialize() { 


     var styles = [{ featureType: "landscape", stylers: [{ color: "#000514"}] }, { featureType: "administrative.country", stylers: [{ weight: 0.1 }, { color: "#009acd"}] }, { featureType: "water", stylers: [{ color: "#1f4fa5dc"}] }, { featureType: "road", stylers: [{ color: "#000514"}] }, { featureType: "administrative.locality", stylers: [{ color: "#7cfc00" }, { visibility: "off"}] }, { featureType: "landscape.man_made", stylers: [{ visibility: "off"}] }, { featureType: "poi", stylers: [{ visibility: "off"}] }, { featureType: "administrative.province", stylers: [{ visibility: "on"}]}]; 

     var mapOptions = { 
      center: new google.maps.LatLng(7.3, 80.6333), 
      zoom: 3, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var map = new google.maps.Map(document.getElementById("map_canvas"), 
     mapOptions); 

     map.setOptions({ styles: styles }); 

     var lineSymbolIn = { 
      path: google.maps.SymbolPath.CIRCLE, 
      scale: 2, 
      strokeColor: '#FF8000' 
     }; 


     for (var i = 0; i < 5; i = i + 1) { 

      var conentVal = i.toString(); 
      //var infowindow = new google.maps.InfoWindow(); 
      var netTrafficIn = [ 
      new google.maps.LatLng(53.3333866 + i, -6.247401 + i), 
      new google.maps.LatLng(7.3, 80.6333)]; 

      var polylineIn = new google.maps.Polyline({ 
       path: netTrafficIn, 
       icons: [{ icon: lineSymbolIn, offset: '100%'}], 
       strokeColor: " #FF8000", 
       strokeOpacity: 1.0, 
       strokeWeight: 1, 
       geodesic: true 

      }); 
      polylineIn.setMap(map); 
      polylinesIn[i]=polylineIn; 
      animateCircleIn(i); 

      addInfowindow(i.toString()); 
      createInfoWindow(i);           
     } 

    } 

    function addInfowindow(contentVal) { 
     infowindow = new google.maps.InfoWindow({ content: contentVal }); 
     infowindowArray.push(infowindow); 
    } 

    function createInfoWindow(id) { 
     google.maps.event.addListener(polylinesIn[id], 'click', (function (id) { 
      return function() { 
       infowindowArray[id].open(map, polylinesIn[id]); 
      } 
     })(id)); 

    } 

    function animateCircleIn(id) { 
     var count = 0; 
     offsetId = window.setInterval(function() { 
      count = (count + 1) % 200; 

      var icons = polylinesIn[id].get('icons'); 
      icons[0].offset = (count/2) + '%'; 
      polylinesIn[id].set('icons', icons); 
     }, 20); 

    } 

非常感謝你:)

奧基我做了一些更改,如巴亞拉建議,但還是信息窗口犯規appear..please help..thank你非常:)

+0

您已經提問此問題。這是相同的情況,在http://stackoverflow.com/questions/11931415/animate-symbol-on-multiple-geodesic-polylines請谷歌「JavaScript封閉」,你可能會學到的東西,而不是一次問相同的問題。 – slawekwin 2012-08-14 08:28:24

+0

嗨,thanx回答以前的1,但我失去了這裏,我試過有功能,但它沒有顯示任何東西:(生病嘗試more..thnx再 – user1584241 2012-08-14 08:39:14

+0

我試圖編輯的代碼,但仍然沒有infowindow :( – user1584241 2012-08-15 05:14:06

回答

0

另一個問題你鏈接到描述你的問題。你必須使用你迭代的變量的副本,以便它不會改變它的值。我把它拿給你在你前面的問題:Animate symbol on multiple geodesic polylines

你可以只移動連接您的活動運作animateCircle這已經這是否:

function animateCircleIn(id) { 
    var count = 0; 
    offsetId = window.setInterval(function() { 
     count = (count + 1) % 200; 

     var icons = polylinesIn[id].get('icons'); 
     icons[0].offset = (count/2) + '%'; 
     polylinesIn[id].set('icons', icons); 
    }, 20); 

     google.maps.event.addListener(polylinesIn[id], 'click', function (event) { 
      infowindow.content = "x" + id.toString(); 
      infowindow.position = event.latLng; 
      infowindow.open(map); //,flightPath); 
     }); 
} 

但這裏真正的問題是,你沒有學到任何東西,從您之前的問題或您在問題中鏈接的問題。你應該閱讀關於「JavaScript關閉」。我真的希望這是你最後一次問到這個問題。

+0

謝謝你的回覆。非常感謝..我確實嘗試學習,但我對這個非常陌生。在材料上閱讀throroly ..當我將它分離到一個新的方法,沒有得到顯示,這是問題... :) – user1584241 2012-08-14 08:59:57

+0

在這種情況下對不起我的爆發:-)你的代碼發佈的問題顯示infowindow每個折線,只是最後一個索引或我誤解了你? – slawekwin 2012-08-14 09:20:22

+0

沒問題..我可以理解:) yeaa ..第一個代碼顯示infowindow中每條折線的最後一個索引。並且它在animateCircle函數中沒有給出infowindow,當我單擊折線時沒有任何反應。 .i累了引用問題中的方法,我構成aswel..same結果..沒有infowindow :( – user1584241 2012-08-14 09:22:47

0

問題是,您正在使用相同的infoWindow所有多段線。 當你的代碼

google.maps.event.addListener(polylinesIn[id], 'click', function (event) { 
      infowindow.content = "x" + id.toString(); 
      infowindow.position = event.latLng; 
      infowindow.open(map); //,flightPath); 
    }); 

這部分改變信息窗口的值更改引用的第一個的價值,並與折線ancored也可能發生變化的所有信息窗口。您在函數內部使用的infowindow不是實例化的副本,而是參考。

在這種情況下,您可以嘗試兩種不同的東西。首先是在你的函數中使用infowindow = new google.maps.InfoWindow();創建一個你想要的每條多段線的infowindow。

或者你可以創建一個新的洞的範圍。在這種情況下,我建議你閱讀這篇文章:Google Maps API - Trouble with Arrays and InfoWindows

+0

嘿謝謝你的答覆..讚賞:)我試着把它放到另一個函數,但沒有出現,因爲在沒有infowindow點擊事件。我厭倦了對摺線陣列位置的引用(這太詭異了......) – user1584241 2012-08-15 04:54:30

+0

我編輯了代碼,你能告訴我現在怎麼了嗎?infowindows不會出現.. :( – user1584241 2012-08-15 05:13:42

0

下面的代碼工作:

  (function (id) { 
       google.maps.event.addListener(polylinesIn[id], 'click', function (event) { 
        infowindow.content = "x" + id.toString(); 
        infowindow.position = event.latLng; 
        infowindow.open(map); //,flightPath); 
       }); 
      })(i) 

我加入這個瓶蓋內的for循環,其解決了這個問題..多謝指點我在正確的方向,傢伙.. :)