首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeviceOrientation罗盘安卓

DeviceOrientation罗盘安卓
EN

Stack Overflow用户
提问于 2020-03-10 19:27:54
回答 2查看 978关注 0票数 1

我尝试使用deviceorientation事件实现一个指南针。我想使用旋转来旋转一个面向观看方向的箭头。当deviceorientation发生变化时,我只是在旋转图像。

在iOS上,通过执行以下操作,这就像魅力一样工作:

代码语言:javascript
复制
if (typeof DeviceOrientationEvent.requestPermission === "function") {
          //@ts-ignore
          DeviceOrientationEvent.requestPermission()
            .then(permissionState => {
              if (permissionState === "granted") {
                this.compassActive = true;
                window.addEventListener(
                  "deviceorientation",
                  eventData =>
                    this.zone.run(() => {
                      if(!this.compassActive){
                        return false;
                      }
                      //@ts-ignore
                      this.rotatePlayerIcon(eventData.webkitCompassHeading);

                    }),
                  false
                );
              }
            })
            .catch(console.error);

因为DeviceOrientationEvent.webkitCompassHeading给了我一个顺时针世界的显示装置的旋转。

我在Android上也尝试过同样的方法,但是我找不到一个基于世界的解决方案。webkitCompassHeading在android上不存在,所以我尝试只使用eventData.alpha。但这给出了0的基础上的旋转,它是当事件是发射,而不是基于世界北部。

我发现的所有指南似乎都过时了。

我如何在机器人上得到顺时针方向的指南针,就像在iOS上那样?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-15 15:31:51

问题是alpha不是绝对的,意味着0不是北的,而是0是设备在激活时所指向的位置。

修复基于铬的浏览器的最佳方法,就像大多数标准的Android浏览器一样,使用来自AbsoluteOrientationSensor的W3C通用传感器API多填充。Github

我所用的项目是基于打字本的。下面是一个打字稿的例子:

代码语言:javascript
复制
import {AbsoluteOrientationSensor} from 'motion-sensors-polyfill'

const options = { frequency: 60, referenceFrame: 'device' };
        const sensor = new AbsoluteOrientationSensor(options);
        sensor.addEventListener('reading', e => {
          this.zone.run(() => {
            var q = e.target.quaternion;
            let alpha = Math.atan2(2*q[0]*q[1] + 2*q[2]*q[3], 1 - 2*q[1]*q[1] - 2*q[2]*q[2])*(180/Math.PI);
            if(alpha < 0) alpha = 360+ alpha;
            this.alpha = 360 - alpha;
            this.rotatePlayerIcon(360 - alpha)
          })
        });
        sensor.start();
票数 0
EN

Stack Overflow用户

发布于 2020-03-10 19:39:10

贝娄,你会看到一个指南针的vtm地图。它还包括一个箭头。除了通常的磁强计-加速度计传感器,我建议使用位置轴承,因为传感器一点也不准确,而且很容易得到disrupted.the的指南针,好处是它包括代码,使它旋转平稳,因为传感器的原始输出经常是噪音。

对于代码来说,它是vtm-mapsforge罗盘的原始版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60624644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档