navigator.geolocation.getCurrentPosition()不起作用

时间:2012-06-18 17:01:16

标签: javascript google-maps-api-3 geolocation

我正在尝试使用地理位置获取当前位置的纬度和经度。非常相似的代码直到最近一直在工作,我无法弄清楚为什么它停止工作。它不再设置变量纬度经度。当我浏览js代码时,跳过了getCurrentPosition()方法,我不知道为什么。奇怪的是,如果我在getCurrentPosition()方法中放置一个警告框,它将正确获取并显示纬度和经度......我不知道为什么会这样做。

var gl;
try {
    if (typeof navigator.geolocation === 'undefined'){
        gl = google.gears.factory.create('beta.geolocation');
    } else {
        gl = navigator.geolocation;
    }
} catch(e) {}

var latitude;
var longitude;

if (gl) {
    gl.getCurrentPosition(
        function (position) {
            latitude = position.coords.latitude;
            longitude = position.coords.longitude;
            //alert("got the lat & long - lat=" + latitude + ", lng=" + longitude);
        },
        function (error) {
            alert("Error getting geolocation:" + error);
        }
    );
} else {
    alert("Geolocation services are not supported by your web browser.");
}

然后我继续使用Google Maps API在地图上设置一些标记。

非常感谢,

彼得

修改

这里JSFiddle上的代码显示了奇怪的行为:

http://jsfiddle.net/JtmCV/

1 个答案:

答案 0 :(得分:1)

我刚试过你的jsfiddle,它运行良好(Win 7上的Chrome 19),所以我不明白它为什么会引起问题。

话虽如此,我强烈建议您使用navigator.geolocation.watchPosition代替navigator.geolocation.getCurrentPosition。我最近在地理定位系统上做了一些工作,发现getCurrentPosition可以返回不可靠的缓存位置,即使您使用options参数指定低maximumAge值。

我的最新版本在以下情况之一成立后停止观看:

  • 已退回第五个位置
  • 准确度低于100米
  • 自手表开始以来的时间超过30秒