информационные окна для каждого маркера карты Google

У меня возникли проблемы с внедрением некоторых данных в информационное окно для динамических маркеров, которые я создаю с некоторыми геопозициями из синтаксического анализа.

 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 маркеров, но открывается только первое информационное окно, независимо от того, какой маркер я нажимаю. Также заголовок каждого маркера правильный.

ОБНОВЛЕНИЕ У меня 17 записей на этой карте, 17 географических точек (широта, долгота), 17 имен, 17 описаний и т. д. Таким образом, с помощью приведенного выше кода я получаю все геоинты и помещаю маркеры в правильные позиции в карта. И я хочу, чтобы при щелчке по маркеру имя и адрес отображались в информационном окне. Но я думаю, что я ошибаюсь в цикле for. Хотя я беру все данные такими, какими они должны быть, каждая геоточка имеет правильное имя и т. Д., Но всякий раз, когда я нажимаю на маркер, только первая запись открывает информационное окно, скажем, я нажимаю 3-й маркер на карте, первое информационное окно будет открыто, также происходит, если я нажимаю 12-й маркер. Есть идеи, почему это происходит?

ОБНОВЛЕНИЕ 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-м обновлении я создаю пустое информационное окно вне цикла for, и после того, как я вызываю содержимое внутри, теперь он открывает все информационные окна, но имеет то же содержимое внутри.

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


person Konstantinos Natsios    schedule 03.02.2016    source источник
comment
извините за то, что недостаточно понимаю вашу проблему. что значит It loads 17 markers? Все ли данные в 17 маркерах загружаются в один маркер в первой записи?   -  person Joe Kdw    schedule 03.02.2016
comment
@HermanNz я отредактирую свой вопрос, чтобы лучше объяснить   -  person Konstantinos Natsios    schedule 03.02.2016
comment
@KwnstantinosNatsios, проверьте первый код (не update2) и исправьте положение внутри маркера: position: new google.maps.LatLng(arlat[j][1], arlat[j][2]),   -  person Joe Kdw    schedule 03.02.2016
comment
@HermanNz я уже получаю их как геоинты с parse.com   -  person Konstantinos Natsios    schedule 03.02.2016


Ответы (2)


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

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);
    });
}
person scaisEdge    schedule 03.02.2016
comment
К сожалению, событие щелчка происходит только для последнего маркера. Что не так? - person mdBender; 09.12.2018
comment
@mdBender зависит ... может быть, у вас нет массива маркеров ... или вы не используете clouser (addListener) должным образом ... тогда вы должны опубликовать новый вопрос со своим кодом ... и четким описанием вас проблема в конце концов прокомментируйте мне ссылку - person scaisEdge; 09.12.2018

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

person kburlz    schedule 03.02.2016