Маркеры карты не отображаются (JavaScript / Google Maps API V3) - PullRequest
4 голосов
/ 01 февраля 2012

У меня проблемы с отображением маркеров карты с помощью Google Maps API v3. Я пытаюсь сохранить их все в одном массиве, чтобы сделать отображение большого количества относительно простым. В настоящее время карта загружается нормально, но выдает ошибку Uncaught TypeError: Object #<Object> has no method 'setValues' при попытке нарисовать маркеры. Ошибка повторяется при каждой итерации, выполняемой setTimeout(). Любые рекомендации будут с благодарностью.

Это используемый JavaScript:

var map;
var markers = [
    [
        45.768366,
        -108.5975760,
        'Fitness 19'
    ],
    [
        45.785684,
        -108.6144625,
        'Granite Fitness'
    ],
      ... (more, syntactically correct)
    [
        45.7920092,
        -108.4886232,
        'Steepworld'
    ]
];
function mapinit() {
    var conf = {
        zoom: 11,
        center: new google.maps.LatLng(45.7832856,-108.5006904),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById('mapcont'),conf);
    for(i in markers) {
        window.setTimeout('mark('+i+')',i*200);
    }
}
function mark(i){
    google.maps.Marker({
        position: google.maps.LatLng(markers[i][0],markers[i][1]),
        animation: google.maps.Animation.DROP,
        title: markers[i][2]
    });
}

Ответы [ 2 ]

6 голосов
/ 26 апреля 2013

Это ключевое слово new, которое имеет все значение!

У меня была такая же проблема.Использование ключевого слова new при создании объекта Marker заставляет его снова работать в Chrome, по крайней мере.Помещение его в событие с другим таймаутом не помогло.И тут я подумал, что new - это не что иное, как синтаксический сахар ...

6 голосов
/ 02 февраля 2012

Ладно, после того, как я немного покопался в JavaScript-консоли Chrome (мне это нравится), я смог заставить его работать идеально. Я переписал функции mapinit() и mark() так:

function mapinit() {
    var conf = {
        zoom: 11,
        center: new google.maps.LatLng(45.7832856,-108.5006904),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById('mapcont'),conf);
    for(i in markers) {
        markers[i][3] = new google.maps.LatLng(markers[i][0],markers[i][1]);
        window.setTimeout('mark('+i+')',i*200);
    }
}
function mark(i){
    new google.maps.Marker({
        position: markers[i][3],
        animation: google.maps.Animation.DROP,
        map: map,
        title: markers[i][2]
    });
}

Основное отличие здесь заключается в том, что переменная position маркера, по-видимому, требует инициализации во внешней переменной по какой-то причине, поэтому, когда я перебираю массив markers, я генерирую google.maps.LatLng в качестве четвертого пункт для каждого маркера. Затем на это ссылается функция mark(), и маркер отображается успешно. setTimeout для ошеломляющего отображения маркеров прекрасно работает, особенно на более быстрых соединениях, где скрипты и карта загружаются быстро.

Просмотр конечного результата на моем сайте inClass

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