我正在使用Sencha Touch为波士顿大学开发移动版本的巴士跟踪器。我遇到的问题是,google.maps.Marker的setPosition()方法不会在Safari或任何移动浏览器中呈现位置更改。谷歌地图API v3标记setPosition在Safari(sencha touch)中不起作用
建立的代码如下:
- 我初始化一个空的标记阵列
- 我初始化使用Ext.Map()(煎茶呼叫)
- 我加载使用JSONP数据的地图请求每隔5秒间隔
- 每当我收到新的数据,我检查如果我有我的标记数组内的巴士ID
- 如果我不创建一个新的标记,并将其推入我的标记数组
- 否则,我在我的标记数组中使用我在标记上的新位置调用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(我不能发布超过一个链接更多)
Michael,谢谢你的帮助。 0.94,确实解决了这个问题(嗯,它使得它在浏览器中保持一致)。但我想,如果我每次都做一个独特的JSON请求,问题就会消失。所以我给我的请求添加了一个timestamp参数,并且它都是固定的。所以我想这是JSON响应的缓存问题,而不是谷歌地图问题。 – 2010-09-13 14:50:25