Google Maps API v3标记setPosition无法在Safari中使用(sencha touch) [英] Google Maps API v3 marker setPosition not working in Safari (sencha touch)

查看:48
本文介绍了Google Maps API v3标记setPosition无法在Safari中使用(sencha touch)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using Sencha Touch to develop a mobile version of a Bus Tracker for Boston University. The problem I a running into is that the method setPosition() for a google.maps.Marker is not rendering the position change in Safari or any Mobile browser.

代码设置如下:

  • 我初始化一个空的标记数组
  • 我使用Ext.Map()(调用sencha)初始化地图
  • 我每隔5秒使用JSONP请求加载数据
  • 每次获得新数据时,我都会检查是否在标记数组中有该总线ID的标记
  • 如果不这样做,我将创建一个新标记并将其推入我的标记数组
  • 否则,我将在标记数组中该标记上的新位置调用setPosition.
  • 然后我执行检查以确保标记的位置已更新为从我的JSON请求接收的位置

我已经验证(我认为)标记数组中的标记每次都在获得新位置.另外,在Chrome和Firefox中,公交车会移动(如预期的那样),但在野生动物园和iPhone/Android浏览器中,什么都不会移动.

I have verified (I think) that the marker inside the markers array is getting the new position everytime. Also, in Chrome and Firefox, my buses move (as expected), but in safari and iPhone/Android browsers, nothing moves.

这是代码段:

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/

You can view the sample here: http://www.bu.edu/nisdev/students/luiscarr/liveBusMobile/

整个javascript都被称为functions.js(我不能发布多个链接)

And the whole javascript is called functions.js (I can't post more than one link)

推荐答案

问题通过在每个时间间隔发出唯一请求来解决.经过更多调试后,我认为这是一个缓存问题.因此,我在JSONP请求中添加了一个timestamp参数,并且该参数已全部修复.

Problem solved by making a unique request every interval. I figured it was a caching problem after some more debugging. So I added a timestamp parameter to the JSONP request and it was all fixed.

这篇关于Google Maps API v3标记setPosition无法在Safari中使用(sencha touch)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆