1

我正在使用 Sencha Touch 为波士顿大学开发移动版本的 Bus Tracker。我遇到的问题是 google.maps.Marker 的方法 setPosition() 没有在 Safari 或任何移动浏览器中呈现位置变化。

设置的代码如下:

  • 我初始化一个空标记数组
  • 我使用 Ext.Map() 初始化地图(sencha 调用)
  • 我每隔 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(我不能发布多个链接)

4

2 回答 2

0

通过每个间隔发出唯一请求来解决问题。经过更多调试后,我认为这是一个缓存问题。所以我在 JSONP 请求中添加了一个时间戳参数,这一切都是固定的。

于 2010-09-13T14:59:46.767 回答
0

[煎茶人] 标记不显示是 0.93 测试版中的一个已知错误。0.94 版本(当前版本)已修复此问题。

于 2010-09-10T23:39:47.967 回答