Я использую 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 (я не могу опубликовать более одной ссылки)