私はSenchaTouchを使用して、ボストン大学のバストラッカーのモバイルバージョンを開発しています。私が遭遇した問題は、google.maps.MarkerのメソッドsetPosition()がSafariやモバイルブラウザで位置の変更をレンダリングしていないことです。
設定されたコードは次のとおりです。
- 空のマーカー配列を初期化します
- Ext.Map()(煎茶呼び出し)を使用してマップを初期化します
- 5秒間隔でJSONPリクエストを使用してデータをロードします
- 新しいデータを取得するたびに、マーカー配列内にそのバス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と呼ばれます(複数のリンクを投稿することはできません)