2010-09-09 68 views
1

我正在使用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(我不能发布超过一个链接更多)

回答

0

问题通过每个间隔发出一个唯一的请求来解决。我想在经过一些更多的调试后,这是一个缓存问题。所以我给JSONP请求添加了一个timestamp参数,并且它都是固定的。

0

[Sencha Person]标记没有出现是0.93 beta版本中已知的一个bug。 0.94版本(当前版本)有这个固定的。

+0

Michael,谢谢你的帮助。 0.94,确实解决了这个问题(嗯,它使得它在浏览器中保持一致)。但我想,如果我每次都做一个独特的JSON请求,问题就会消失。所以我给我的请求添加了一个timestamp参数,并且它都是固定的。所以我想这是JSON响应的缓存问题,而不是谷歌地图问题。 – 2010-09-13 14:50:25