为什么标题停留在“空”的地理位置在android与Chrome

46qrfjad  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(84)

我创建了一个小的地理定位手表:

navigator.geolocation.watchPosition(
    this.updateLocation.bind(this),
    this.errorLocation.bind(this),
    {enableHighAccuracy: true}
);

其中updateLocation定义为:

private updateLocation(position: Position) {
    this.myLatitude = position.coords.latitude;
    this.myLongitude = position.coords.longitude;
    this.myAccuracy = position.coords.accuracy;
    if (position.coords.heading != null) {
        this.myHeading = Game.toRad(position.coords.heading);
    }
    this.GPSWorking = true;
}

现在这段代码正在“工作”,我看到它更新GPS数据,精度和预期的一样。- 只有一个“但是”标题总是“空”。我可以期待这一点时,在pc上,甚至当没有启用高精度。
然而,在所有的设置,我尝试了它给出“空”。
我知道我移动的有一个工作陀螺仪:实际上我可以在原生Android应用程序中获得标题。- 我还注意到谷歌Map(网站,通过Chrome)能够确定我的航向;所以我一定做错了什么
一个小提琴,让人们可以测试它:https://jsfiddle.net/8p5rngtk/15/-我只对航向感兴趣(尽管剩下的是显示gps在设备上工作)。

编辑:

它“只是”开始像预期的那样工作。(非常好),我仍然注意到的唯一一件事是,更新频率比我写它作为本地应用程序时慢得多-慢得我不能依赖它为我的应用程序。
无论如何,如果有人知道为什么这“有时”有效,它可能会帮助未来的问题。

ffx8fchx

ffx8fchx1#

我所知道的所有浏览器目前都不支持heading属性。就像海拔一样。
Generic Sensors API可能会在未来提供一些帮助。(注:他们永远不会实施拟议的地理定位“传感器”)
我希望看到高度和航向得到支持,但只要想想需要过滤的事件越来越多:-(

cgfeq70w

cgfeq70w2#

我把这个留在这里是因为我在同样的问题上浪费了一整天。你正在寻找错误的API来获取手机的方向。地理位置中的航向属性不是罗盘方向,而是基于电话的移动计算的方向。如果你站着不动,航向是空的。当你移动的时候,把航向指向你移动的方向.查看此文档:https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates/heading
您要查找的是“deviceorientation”事件。对于iOS/Safari,您必须首先手动请求该功能。(这是Typescript代码)

const isIOS = !(
    navigator.userAgent.match(/(iPod|iPhone|iPad)/) &&
    navigator.userAgent.match(/AppleWebKit/)
);
if (isIOS) {
    (DeviceOrientationEvent as any).requestPermission()
        .then((response: any) => {
            if (response === "granted") {
                window.addEventListener("deviceorientation", this.receivedNewHeading, true);
            } else {
                alert("has to be allowed!");
            }
        })
        .catch(() => alert("not supported"));
} else {
    window.addEventListener("deviceorientationabsolute", this.receivedNewHeading, true);
}

相关问题