Проблемы с массивом маркеров для API Карт Google

#javascript #google-maps

#javascript #google-карты

Вопрос:

Я начал перечислять свои маркеры по отдельности для моей карты Google, но быстро понял, что это неэффективно. Я попытался создать массив для размещения маркеров на моей карте, но он ничего не показывает, можете ли вы увидеть, где я ошибся?

 function initialize() {
        var latlng = new google.maps.LatLng(52.474, -1.868);

        var myOptions = {
            zoom: 11,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        var image = 'i/hotel-map-pin.png';

        var hotels = [
            ['ibis Birmingham Airport', 52.452656, -1.730548, 4],
            ['ETAP Birmingham Airport', 52.452527, -1.731644, 3],
            ['ibis Birmingham City Centre', 52.475162, -1.897208, 2]
        ];

        for (var i = 0; i < hotels.length; i  ) {
            var marker = new google.maps.Marker({
                position: hotels[1],
                map: map,
                icon: image,
                title: hotels[0],
                zIndex: hotels[2]
            });
        }
    }
  

Спасибо.

Ответ №1:

В вашем цикле вы обращаетесь к массиву отелей с фиксированными индексами (1, 0 и 2), а не к элементам массива с индексом i:

   for (var i = 0; i < hotels.length; i  ) {
        var hotel = hotels [i]
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng (hotel[1], hotel[2]),
            map: map,
            icon: image,
            title: hotel[0],
            zIndex: hotel[3]
        });
    }
  

Вот рабочий пример с исправлением.

Комментарии:

1. @Gogster Проблем нет. Это было легко допустить ошибку.

2. почему вы не использовали foreach (отели как hotel), чтобы упростить себе жизнь?

Ответ №2:

Вот демонстрация JSFiddle:

Прежде всего, вы неправильно обращаетесь к массиву отелей. Это должно быть hotels[i][0] для заголовка hotels[i][1] , hotels[i][2] для широты и lng и hotels[i][3] для z-индекса. Во-вторых, position принимает google.maps.LatLng объект с широтой и lng в качестве параметра.

 function initialize() {
    var latlng = new google.maps.LatLng(52.474, -1.868);

    var myOptions = {
        zoom: 11,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var image = 'i/hotel-map-pin.png';

    var hotels = [
        ['ibis Birmingham Airport', 52.452656, -1.730548, 4],
        ['ETAP Birmingham Airport', 52.452527, -1.731644, 3],
        ['ibis Birmingham City Centre', 52.475162, -1.897208, 2]
        ];

     for (var i = 0; i < hotels.length; i  ) {
         var marker = new google.maps.Marker({
             position: new google.maps.LatLng(hotels[i][1], hotels[i][2]),
             map: map,
           //  icon: image,
             title: hotels[i][0],
             zIndex: hotels[i][3]
         });
     }
}

window.onload = initialize;
  

Комментарии:

1. я закомментировал значок для целей jsfiddle

2. @Kyj112 1 Ты опередил меня примерно на 30 секунд с тем же ответом 😉

3. @RedBlueThing о, хе-хе 1 за тебя, Гуру. Вы действительно являетесь старшинством в темах Google Maps / bow