Google Maps API v3标记setPosition无法在Safari中工作(sencha touch)

时间:2010-09-09 18:51:46

标签: iphone google-maps safari sencha-touch

我正在使用Sencha Touch开发波士顿大学的移动版公交车追踪器。我遇到的问题是google.maps.Marker的方法setPosition()没有在Safari或任何移动浏览器中呈现位置更改。

代码设置如下:

  • 我初始化一个空标记数组
  • 我使用Ext.Map()(sencha call)
  • 初始化地图
  • 我每隔5秒钟使用一次JSONP请求加载数据
  • 每次我获得新数据时,都会检查我的标记数组
  • 中是否有该标记
  • 如果我不这样做,我会创建一个新标记并将其推入我的标记数组
  • 否则我会在我的标记数组中使用该标记上的新位置调用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 :(得分:0)

[Sencha Person]标记未显示是0.93测试版中的已知错误。 0.94版本(当前版本)已修复此问题。

答案 1 :(得分:0)

通过每个间隔发出一个唯一请求来解决问题。经过一些调试后,我认为这是一个缓存问题。所以我在JSONP请求中添加了一个timestamp参数,并且它都已修复。