Не получается вывести балун для маркеров после кластеризации google maps

Тема в разделе "JavaScript", создана пользователем 13zone, 21 фев 2018.

Метки:
Модераторы: ZiX
  1. 13zone

    13zone

    Регистр.:
    22 ноя 2008
    Сообщения:
    205
    Симпатии:
    45
    целый день ковыряюсь и что-то никак не получается (( нужно вывести информационное окно для маркера при клике на нем.. вот код (без инфоокна). уже пробовал разные варианты, не работает ничего. туплю..

    Код:
    var icons = { // свои иконки для каждого типа обьекта
        batarei: {
            icon: 'batarei.png'
        },
        makulatura: {
            icon: 'makulatura.png'
        },
        odejda: {
            icon: 'odejda.png'
        },
        metallolom: {
            icon: 'metallolom.png'
        },
        rtut: {
            icon: 'mercury.png'
        },
        plastkr: {
            icon: 'plastkr.png'
        },
        plastbut: {
            icon: 'plastbut.png'
        },
        steklo: {
            icon: 'steklo.png'
        },
        shina: {
            icon: 'shina.png'
        },
        other: {
            icon: 'other.png'
        },
    };
    var infowindow = null;
    var markers = [];
    var nono = <?php echo json_encode($abons); ?>; // массив со всеми данными из базы - nono[i][9] текст для балуна маркера
    var locations = <?=$point; ?>; // координаты всех маркеров
    function initMap() {
    map = new google.maps.Map(document.getElementById("map"), {
            center: new google.maps.LatLng(49.988546, 36.233000), // центр в Харькове
            zoom: 9,
            gridSize: 50,
            mapTypeControl: true,
            disableDefaultUI: true,
            zoomControl: true,
        });
        var markers = locations.map(function (location, i) {
            return new google.maps.Marker({
                position: location,
                map: map,
                icon: nono[i][3] + '.png',
                title: nono[i][4],
                labelAnchor: new google.maps.Point(3, 30),
                animation: google.maps.Animation.DROP
    
            });
            // маркеры падают на карту вразнобой
            function drop() {
                for (var i = 0; i < markerArray.length; i++) {
                    setTimeout(function () {
                        addMarkerMethod();
                    }, i * 300);
                }
            }
        });
        var markerCluster = new MarkerClusterer(map, markers,
            {
                imagePath: window.location.protocol + "//" + window.location.host + "/" + 'images/m'
            });
    }
    function newLocation(newLat,newLng)
    {
        map.setCenter({
            lat : newLat,
            lng : newLng
        });
    }
     
  2. Sandbird

    Sandbird Писатель

    Регистр.:
    21 фев 2018
    Сообщения:
    5
    Симпатии:
    2
  3. 13zone

    13zone

    Регистр.:
    22 ноя 2008
    Сообщения:
    205
    Симпатии:
    45
    1. конечно присутствует
    2. все правильно, карта выводится, кластеризация идет, иконки для обьектов выводит, тайтл тоже выводит
    3 посмотреть можно тут
     
  4. Sandbird

    Sandbird Писатель

    Регистр.:
    21 фев 2018
    Сообщения:
    5
    Симпатии:
    2
    Unfortunately i got no idea what $abons is...so i cant test out your code.
    You need to add a click listener to each marker which opens the InfoWindow with that unique content.
    Код:
    var infoWin = new google.maps.InfoWindow();
    var markers = locations.map(function(location, i) {
      var marker = new google.maps.Marker({
        position: location
      });
      google.maps.event.addListener(marker, 'click', function(evt) {
        infoWin.setContent(location.info);
        infoWin.open(map, marker);
      })
      return marker;
    });
    and then attach the listener (inside function initMap() !!)
    Код:
    google.maps.event.addDomListener(window, "load", initMap);
    Example fiddle: http://jsfiddle.net/geocodezip/wyn4mk8n/

    But the above code will take the infowindow text from the Locations array...You need to modify it a bit, or just put the info in your locations array :)
     
    Последнее редактирование: 23 фев 2018
    Absolute и 13zone нравится это.
  5. 13zone

    13zone

    Регистр.:
    22 ноя 2008
    Сообщения:
    205
    Симпатии:
    45
    уже по всякому делал, и не работало.. и по инструкции и в различных вариациях решений. - это решение работает

    with me like and beer;) Thank you very much. Well, or invite to a beer - Ukraine, Kharkov.