Вопрос по – Динамические маркеры - API Карт Google - Маркеры не увеличиваются со значением i в цикле

1

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

The dynamic Markers are not incrementing with the value of "i".. so the map displays all markers with "1" and not "1,2,3,4,5"

// Define Vars
var pinColor = "FE7569";
var marker, i;

// Set default map center location
var latlng = new google.maps.LatLng(-27.79014,153.18049);

// Create pinShadow for each marker 
var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com        /chart?chst=d_map_pin_shadow",
    new google.maps.Size(40, 37),
    new google.maps.Point(0, 0),
    new google.maps.Point(12, 35));

// Function to create the dynamic marker
function pinImage(i){
    return image = new google.maps.MarkerImage("http://www.googlemapsmarkers.com/v1/"+i+"/"+pinColor+"/", new google.maps.Size(21, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34));
}

// Function to run once page has loaded
    function initialize(){      
// Set Default settigns for google map
var settings = {
    zoom: 10,
    center: latlng,
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
    mapTypeId: google.maps.MapTypeId.ROADMAP};

// Start Google Maps and assign it to div on site
var map = new google.maps.Map(document.getElementById("map_canvas"), settings);     

// loop though total numner of address in array
for (i = 1; i < total; i++) {  
    // Use geocoder to grab latlong for user inputed address
    geocoder.geocode( { 'address': address[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            // Redefine map center location
            if (i = 1){ map.setCenter(results[0].geometry.location); }

            // Create dynamic markers on map as per the address array
            var marker = new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location,
                title:address[i],
                zIndex: i,
                // PROBLEM CODE --- Using the function below it creates all Markers with a "1" instead of the "i" value..??  
                icon: pinImage(i),
                shadow: pinShadow
            });         
        }
    });
    }
}

Ваш Ответ

1   ответ
0

(function(i) {...})(i) работает здесь Без этого выполнение принимает окончательное значение i. Также,if(i = 1) должно бытьif(i == 1)

Чтобы поиграть:http://jsfiddle.net/BK8vv/

for (var i = 1; i < total; i++) {  
   (function(i) {

    // Use geocoder to grab latlong for user inputed address
    geocoder.geocode( { 'address': address[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            // Redefine map center location
            if (i == 1){ map.setCenter(results[0].geometry.location); }

            // Create dynamic markers on map as per the address array
                    alert(i);
            var marker = new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location,
                title:address[i],
                zIndex: i,
                // PROBLEM CODE --- Using the function below it creates all Markers with a "1" instead of the "i" value..??  
                icon: pinImage(i),
                shadow: pinShadow
            });         
        }
       });
     })(i);
    }
}
Error: User Rate Limit Exceeded Kevin Allison
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы