2012-06-10 2 views
0

Я пытаюсь сделать infowindow для каждого из своих маркеров какое-то время, но не могу заставить его работать.API Карт Google v3 - Массивы и InfoWindows

Это то, что я придумал:

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' в любом месте вашего кода, но вы ссылаетесь на объект в прослушивателе событий (первый аргумент). Предложите сначала создать объект-маркер и назначить его переменной с именем-маркером, прежде чем нажимать объект-маркер в массив ... – andresf

+0

Я объявляю это: «var markert = [];» в начале скрипта .. непосредственно перед "function initialize()". Но что еще не работает – user1447052

+0

Ссылка на живый код? – andresf

ответ

0

Вы на самом деле не открывая InfoWindow в любой точке. Пожалуйста, ознакомьтесь с этим documentation and example и соответствующим образом адаптируйте свой код. Вам действительно нужно использовать метод open для infowindow.

+0

Хм, я попробовал открытый метод, но он тоже не работал – user1447052

+0

Он работает только для первого маркера в цикле. – user1447052

Смежные вопросы