Набор маркеров API Карт Google v3 не работает в Safari (sencha touch) - PullRequest
1 голос
/ 09 сентября 2010

Я использую Sencha Touch для разработки мобильной версии Bus Tracker для Бостонского университета.Проблема, с которой я сталкиваюсь, заключается в том, что метод setPosition () для google.maps.Marker не отображает изменение позиции в Safari или любом мобильном браузере.

Код настройки следующий:

  • Я инициализирую пустой массив маркеров
  • Я инициализирую карту с помощью Ext.Map () (вызов sencha)
  • Я загружаю данные с использованием запроса JSONP каждые 5 секунд
  • Каждый раз, когда я получаю новые данные, я проверяю, есть ли у меня маркер для этого идентификатора шины в моем массиве маркеров
  • Если я не создаю новый маркер и помещаю его в свой массив маркеров
  • В противном случае я вызываю setPosition с моей новой позицией на этом маркере в моем массиве маркеров.
  • Затем я запускаю проверку, чтобы убедиться, что позиция маркера обновлена ​​до позиции, полученной из моего запроса JSON

Я убедился (я думаю), что маркер внутри массива маркеров каждый раз получает новую позицию.Кроме того, в Chrome и Firefox мои автобусы двигаются (как и ожидалось), но в браузерах Safari и iPhone / Android ничего не движется.

Вот фрагмент кода:

var markers = {};
var busesFunc = function()
{
    Ext.util.JSONP.request({
        url: 'http://m.cms-devl.bu.edu/rpc/bus/livebus.json.php',
        callbackKey: 'callback',
        params: {
        },
        callback: function(data) {
            buses = data.ResultSet.Result;          

            for (var i = 0, ln = buses.length; i < ln; i++) {
                var bus = buses[i];

                var position = new google.maps.LatLng(bus.lat, bus.lng); 

                if(!markers[bus.id])
                {
                     markers[bus.id] = new google.maps.Marker({
                            map: map.map,
                            title: 'hello',
                            clickable: true,
                            draggable: false,
                            position: position,
                            icon: "images/bg.png",
                            zIndex: 100
                        });
                 }

                 markers[bus.id].setPosition(position);
                 //markers[bus.id].setIcon("images/bg.png");
                 //markers[bus.id].setMap(map.map);
                 //markers[bus.id].setMap(map.map);

                 if(bus.lat != markers[bus.id].position.lat()  || bus.lng != markers[bus.id].position.lng())
                 {
                    console.log(bus.id + " " + bus.lat + " " + bus.lng);
                    console.log(bus.id + " " + markers[bus.id].position.lat() + " " + markers[bus.id].position.lng());
                 }
            }
        }
    });
}
setInterval(busesFunc, 5000);

Вы можетепосмотрите пример здесь: http://www.bu.edu/nisdev/students/luiscarr/liveBusMobile/

И весь javascript называется functions.js (я не могу опубликовать более одной ссылки)

Ответы [ 2 ]

0 голосов
/ 13 сентября 2010

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

0 голосов
/ 11 сентября 2010

Маркеры [Sencha Person], которые не отображаются, являются известной ошибкой в ​​бета-версии 0.93. В версии 0.94 (текущей) это исправлено.

...