2012-06-10 88 views
0

我一直在努力爲我的標記每一個infowindow一會兒,但不能讓它工作。谷歌地圖API v3 - 數組和信息窗口

這是我想出了:

for(var i=0; i<markery.length; i++) 
{ 
    var latt = parseFloat(markery[i].attributes.getNamedItem("lat").nodeValue); 
    var lon = parseFloat(markery[i].attributes.getNamedItem("lon").nodeValue); 
    var ikona_url = markery[i].attributes.getNamedItem("ikona").nodeValue; 
    var nazwa = markery[i].attributes.getNamedItem("nazwa").nodeValue; 
    var rozmiar = new google.maps.Size(30,23); 
    var punkt_startowy = new google.maps.Point(0,0); 
    var punkt_zaczepienia = new google.maps.Point(15,12); 
    var ikona = new google.maps.MarkerImage(ikona_url, rozmiar, punkt_startowy, punkt_zaczepienia); 
    markert.push(new google.maps.Marker({ 
        position: new google.maps.LatLng(latt,lon), 
        title: nazwa, 
        icon: ikona, 
        map: map, 
        content: nazwa 
       })); 

    google.maps.event.addListener(marker, 'click', function() { 
     var info = new google.maps.InfoWindow({content: this.content}); 
    }); 
} 

而且完整的代碼:

<script type="text/javascript"> 

var map; 
var marker1; 
var markert = []; 
var lati; 
var loni; 
var infowindow; 

我開始在地圖:

function initialize() { 

    lat = 50.42952; 
    long = 15.60059; 
    var latlng = new google.maps.LatLng(lat, long); 
    var myOptions = { 
     zoom: 5, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     draggableCursor:'crosshair', 
       }; 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
dymek = new google.maps.InfoWindow(); 

    google.maps.event.addListener(map, 'click', function(event) { 
     add_marker(event.latLng, 'Your new marker', 'Your new marker'); 
    }); 

} 

這個函數獲取的地址點擊點:

 function findAddress(event) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({latLng: event.latLng}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     if (results[0]) { 

      infoWindow.setContent(results[0].formatted_address); 
      infoWindow.setPosition(event.latLng); 
      infoWindow.open(map); 
     } 
     } 
    }); 
    } 

此功能增加了一個新的標記,我點擊上圖:

function add_marker(pos, pos_title, pos_str) { 

    marker1 = new google.maps.Marker({ 
     position: pos, 
     map: map, 
     draggable: true, 
     title: pos_title 
    }); 

    map.setZoom(15); 
    map.setCenter(marker1.getPosition()); 
    LoadMarkers(); 
        } 

此函數加載是我在上面的函數生成的標記附近的景點:

function LoadMarkers() 
     { 

var adres='add.xml?lat='+lati+'&long='+loni; 
      jx.load(adres, function(xml) 
      { 
       var markery = xml.getElementsByTagName("marker"); 
       for(var i=0; i<markery.length; i++) 
       { 
        var latt   = parseFloat(markery[i].attributes.getNamedItem("lat").nodeValue); 
        var lon   = parseFloat(markery[i].attributes.getNamedItem("lon").nodeValue); 
        var ikona_url = markery[i].attributes.getNamedItem("ikona").nodeValue; 
        var nazwa  = markery[i].attributes.getNamedItem("nazwa").nodeValue; 
       var markert  = addMarkers(latt,lon,ikona_url,nazwa); 



       } 

      },'xml','get'); 
     } 

這函數實際上會在地圖上標註附近的標記。這些標記是我想要的信息窗口,顯示的:

function addMarkers(latt,lon,ikona_url,nazwa) 
     { 
      var rozmiar = new google.maps.Size(30,23); 
      var punkt_startowy = new google.maps.Point(0,0); 
      var punkt_zaczepienia = new google.maps.Point(15,12);  
      var ikona = new google.maps.MarkerImage(ikona_url, rozmiar, punkt_startowy, punkt_zaczepienia); 
      markert.push(new google.maps.Marker({ 
         position: new google.maps.LatLng(latt,lon), 
         title: nazwa, 
         icon: ikona, 
         map: map, 
         animation: google.maps.Animation.DROP })); 

google.maps.event.addListener(markert, 'tilesloaded', function() { 
    var info = new google.maps.InfoWindow({content: nazwa}); 
}); 

     } 

+0

您並未在代碼中的任何位置聲明名爲'marker'的變量,但是您在事件偵聽器(第一個參數)中引用了該對象。建議您先將標記對象創建並將其分配給名爲marker的變量,然後再將標記對象插入到數組中... – andresf

+0

我在腳本的beginig聲明瞭它:「var markert = [];」 ..就在「函數初始化()」之前。但這仍然無效 – user1447052

+0

鏈接到實時代碼? – andresf

回答

0

你實際上並沒有在任何時候打開信息窗口。請檢查此documentation and example,並相應地調整您的代碼。您實際上需要使用open方法來處理infowindow

+0

嗯,我試過開放的方法,但它也沒有工作 – user1447052

+0

它只適用於循環中的第一個標記。 – user1447052