2016-02-03 6 views
1

У меня возникли проблемы с реализацией некоторых данных в infowindow для динамических маркеров, которые я делаю с некоторыми геодезическими методами.info windows для каждого маркера google maps

function initMap(arlat, arlon, arname, artel, ardesc, aradd, arithmisi) { 

    var map = new google.maps.Map(document.getElementById('map'), { 
          zoom: 6, 
          center: { 
           lat: 37.58, 
           lng: 23.43 
          } 
         }); 
         var iconBase = 'http://sourtouki.gr/'; 

         for (j = 0; j < arithmisi; j++) { 
          var contentString = '<div id="content">' + 
           '<div id="siteNotice">' + 
           '</div>' + 
           arname[j] + 
           '<div id="bodyContent">' + 
           ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
           '</div>' + 
           '</div>'; 


          var marker = new google.maps.Marker({ 
           position: { 
            lat: arlat[j], 
            lng: arlon[j] 
           }, 
           map: map, 
           icon: iconBase + 'sourtoukilogo.png',   
           title: arname[j] 
          });   
         } 
         var infowindow = new google.maps.InfoWindow({ 
          content: contentString 
         }); 

         marker.addListener('click', function() { 
          infowindow.open(map, marker); 
         }); 
        } 

Таким образом, с приведенным выше кодом я нажимаю некоторые данные, которые у меня есть из некоторых таблиц на карту. Маркеры создаются в местах, где они должны быть, но всякий раз, когда я нажимаю на маркер, он открывается только один. Он загружает 17 маркеров, но единственная открытая инфоиндустрия - это первая запись, независимо от того, какой маркер я нажимаю. Также заголовок каждого маркера является правильным.

UPDATE У меня есть 17 записей на этой карте, 17 geopoints (лат, LNG), 17 наименований, 17description и т.д. Так с кодом выше я получить все geoipoints и я положил маркеры на правильные позиции в карту. И я хочу, когда я нажимаю на маркер, чтобы взять имя и адрес и отобразить его в infowindow. Но я думаю, что я где-то не так в цикле for. Хотя я беру все данные так, как они должны быть, каждый геосайт имеет правильное имя и т. Д., Но всякий раз, когда я нажимаю маркер, только 1-я запись открывает инфо-окно, скажем, что я нажимаю 3-й маркер на карте, 1-й инфо-окно будет open, также случается, если я нажимаю 12-й маркер. Любая идея, почему это происходит?

UPDATE 2

function initMap(arlat, arlon, arname, artel, ardesc, aradd, arithmisi) { 



        // console.log(arlat.length + arlon.lenght); 

        var map = new google.maps.Map(document.getElementById('map'), { 
         zoom: 6, 
         center: { 
          lat: 37.58, 
          lng: 23.43 
         } 
        }); 
        var iconBase = 'http://sourtouki.gr/'; 

        infowindow = new google.maps.InfoWindow(); 
        for (j = 0; j < arithmisi; j++) { 

         var marker = new google.maps.Marker({ 
          position: { 
           lat: arlat[j], 
           lng: arlon[j] 
          }, 
          map: map, 
          icon: iconBase + 'sourtoukilogo.png', 

          title: arname[j] 
         }); 
        var contentString = '<div id="content">' + 
          '<div id="siteNotice">' + 
          '</div>' + 
          arname[j] + 
          '<div id="bodyContent">' + 
          ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
          '</div>' + 
          '</div>'; 

          google.maps.event.addListener(marker, 'click', function() { 
            infowindow.setContent(contentString); 
            infowindow.open(map,this); 

           }); 


        } 


       } 

На 2 обновления я сделать пустой InfoWindow вне для цикла и после того, как я называю содержимое внутри и теперь она открывает все infowindows но имеет то же содержание внутри.

Общая информация Я пробовал много ответов в других вопросах здесь, в stackoverflow, и никто не исправил работу для моего дела, если бы кто-то мог помочь, я был бы благодарен!

+0

извините за недоразумение ваша проблема. что означает «Он загружает 17 маркеров»? Все ли данные в 17 маркерах загружаются в один маркер в первой записи? –

+0

@HermanNz Я отредактирую свой вопрос, чтобы лучше объяснить –

+0

Возможный дубликат [API JS API для Google Maps v3 - Пример простого множественного маркера] (http://stackoverflow.com/questions/3059044/google-maps-js-api-v3- simple-multiple-marker-example) – geocodezip

ответ

2

Ваш цикл только и не для маркера и для InfoWindow и слушателя, потому что они находятся вне цикла попробовать этот путь .. но самое главное, вам нужен массив маркеров вместо того, чтобы единый маркер таким образом

var markers = []; 

for (j = 0; j < arithmisi; j++) { 
    var contentString = '<div id="content">' + 
     '<div id="siteNotice">' + 
     '</div>' + 
     arname[j] + 
     '<div id="bodyContent">' + 
     ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
     '</div>' + 
     '</div>'; 


    var marker = new google.maps.Marker({ 
     position: { 
      lat: arlat[j], 
      lng: arlon[j] 
     }, 
     map: map, 
     icon: iconBase + 'sourtoukilogo.png',   
     title: arname[j] 
    });   

    k = markers.push(marker); 

    var infowindow = new google.maps.InfoWindow({ 
     content: contentString 
    }); 

    markers[k-1].addListener('click', function() { 
     infowindow.open(map, marker); 
    }); 
} 
+0

Я тоже пробовал это, но он все тот же –

+0

Попробуйте использовать массивы маркеров вместо маркера .. У меня есть ответ на вопрос. – scaisEdge

+0

Yeap правильно !!! теперь я получаю их –

0

Содержимое вашего информационного наполнения устанавливается за пределами цикла for. Поэтому всегда будет установлено последнее значение contentString.