我正在尝试在 Javascript/JQuery(使用设备方向)中创建一个可靠的指南针,以便它可以在 iOS 和 Android 移动设备上运行。我知道 Stackoverflow 中关于这个主题的几乎所有(非常古老的)问题/答案。我创建了一个非常简单的指南针,它在 iOS 设备上运行良好。在 Android 设备 (Galaxy S8) 上,我有一个奇怪的行为:就像我每天都在测试罗盘方向北切换到 -45/+45、90(北在东)、180(北在南)的偏移量) 或 270 度(北在西)。是的,我考虑过指南针校准(8 位数运动,在测试前将手机绕 3 个轴转动)。
这是指南针的 Javascript 代码:
if (isIos()) // // Function in the background evaluating OS
{
window.addEventListener('deviceorientation', function(event) {
var alpha;
// Use Webkit heading for iOS
alpha = event.webkitCompassHeading;
if (alpha < 0) { alpha += 360; }
if (alpha > 360) { alpha -= 360; }
// Calculated heading
console.log (alpha);
});
}
else {
// Any other …Run Code Online (Sandbox Code Playgroud)对于智能手机的增强现实网络应用程序,我正在尝试计算当用户手持设备时的罗盘方向,屏幕在垂直平面中,屏幕顶部朝上.
我从http://dev.w3.org/geo/api/spec-source-orientation(参见工作示例)中采用了建议的公式,并实现了以下功能:
function compassHeading(alpha, beta, gamma) {
var a1, a2, b1, b2;
if ( beta !== 0 || gamma !== 0 ) {
a1 = -Math.cos(alpha) * Math.sin(gamma);
a2 = Math.sin(alpha) * Math.sin(beta) * Math.cos(gamma);
b1 = -Math.sin(alpha) * Math.sin(gamma);
b2 = Math.cos(alpha) * Math.sin(beta) * Math.cos(gamma);
return Math.atan((a1 - a2) / (b1 + b2)).toDeg();
}
else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
而.toDeg()是一个Number对象扩展,由http://www.movable-type.co.uk/scripts/latlong.html提供
/** Converts radians to numeric (signed) degrees */
if (typeof Number.prototype.toDeg == 'undefined') { …Run Code Online (Sandbox Code Playgroud) 我正在使用react-native-sensor从这些传感器中获取原始数据。
import {magnetometer, acclerometer} from 'react-native-sensors';
const subscription = accelerometer.subscribe(({ x, y, z, timestamp }) =>
console.log({ x, y, z, timestamp })
this.setState({ accelerometer: { x, y, z, timestamp } })
);
const subscription = magnetometer.subscribe(({ x, y, z, timestamp }) =>
console.log({ x, y, z })
this.setState({ magnetometer: { x, y, z, timestamp } })
);
Run Code Online (Sandbox Code Playgroud)
给定这6个数据点,我怎样才能得到程度和方向?什么是合适的算法?
我不明白这个答案中的算法。这个答案使用了 alpha、beta、gamma...与“x、y、z”相同吗?为什么只使用 3 个数据点而不是 6 个?为什么其他一些答案说需要加速度计数据(用于倾斜调整?)。为什么没有利用所有 6 个数据点的答案?
(注意:文档中有“磁力计”的拼写错误)
javascript ×2
cllocation ×1
compass ×1
deviation ×1
firefox ×1
geolocation ×1
html5 ×1
math ×1
sensors ×1