我正在使用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