Google Map API, один и тот же значок для каждого маркера - PullRequest
0 голосов
/ 05 января 2012

Мне бы хотелось иметь разные иконки для каждого из моих маркеров.У меня проблема с моим кодом.Используется только последний элемент массива.Если в массиве запросов есть 3 элемента, все 3 маркера будут иметь значки 3.png.

Спасибо за помощь!

        var img = new Array();
        img.push("'images/1.png", "images/2.png", "images/3.png", "images/4.png", "images/5.png", "images/6.png", "images/7.png", "images/8.png", "images/9.png");

        var myOptions = {
            scaleControl: true,
            streetViewControl: false,
            zoom: 12,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById('map_canvas'),
        myOptions);

        var markers = new Array(query.length);

        for (i=0;i<query.length;i++)
        {
            var geocoder = new google.maps.Geocoder();
            var address = query[i];

            var image = new google.maps.MarkerImage(
            img[i],
            new google.maps.Size(24,24),
            new google.maps.Point(0,0),
            new google.maps.Point(24,24)
            );

            geocoder.geocode({ 'address': address }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    map.setCenter(results[0].geometry.location);
                    markers[i] = new google.maps.Marker({
                        title:"Marker "+i,
                        icon: image,
                        map: map,
                        position: results[0].geometry.location
                    });
                    markers[i].setMap(map); 
                } else {
                    alert("Geocode was not successful for the following reason: " + status);
                }
            });


        };

    }

    google.maps.event.addDomListener(window, 'load', initialize);

Ответы [ 2 ]

1 голос
/ 05 января 2012

Асинхронный доступ к службе геокодирования в Google

Это должно решить вашу проблему,

    var img = new Array();
    img.push("'images/1.png", "images/2.png", "images/3.png", "images/4.png", "images/5.png", "images/6.png", "images/7.png", "images/8.png", "images/9.png");

    var myOptions = {
        scaleControl: true,
        streetViewControl: false,
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(document.getElementById('map_canvas'),
    myOptions);

    var markers = new Array(query.length);
    var images = new Array(query.length);

    for (i=0;i<query.length;i++)
    {
        var geocoder = new google.maps.Geocoder();
        var address = query[i];

        var image = new google.maps.MarkerImage(
        img[i],
        new google.maps.Size(24,24),
        new google.maps.Point(0,0),
        new google.maps.Point(24,24)
        );

        images[i] = image;

        geoCode(i);

   };

    function geoCode(i){

           geocoder.geocode({ 'address': address }, function (results, status) {

            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                markers[i] = new google.maps.Marker({
                    title: results[0].formatted_address,
                    icon: images[i],
                    map: map,
                    position: results[0].geometry.location
                });
                markers[i].setMap(map); 
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }


}

google.maps.event.addDomListener(window, 'load', initialize);
0 голосов
/ 05 января 2012

Кажется, что вы всегда получаете одно и то же i в обратном вызове, переданном geocode.Вы можете попробовать решение, подобное одному предложенному .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...