Get compass data

To get compass data just listen on deviceorientation event. Also don't forget to add "location" privilege and "sensor.accelerometer", "sensor.gyroscope" and "sensor.magnetometer" features to config.xml.
// add features to config.xml:
// <feature name="http://tizen.org/feature/sensor.accelerometer"/>
// <feature name="http://tizen.org/feature/sensor.gyroscope"/>
// <feature name="http://tizen.org/feature/sensor.magnetometer"/>

// add privilege to config.xml:
// <tizen:privilege name="http://tizen.org/privilege/location"/>


var lastAngle = -1; // last measurement
var rotation = 0; // compass rotation

window.removeEventListener("deviceorientation", compassListener, false);

function compassListener(event) {
	var degrees = compassHeading(event.alpha, event.beta, event.gamma);
	console.log(Math.round(degrees) + '° ' + getDirection(degrees));
}

function compassHeading(alpha, beta, gamma) {
	var angle = alpha, deltaAngle;

    // check angle change and calculate the rotation of the compass
    deltaAngle = lastAngle - angle;
    if (Math.abs(deltaAngle) > 180) {
        if (deltaAngle > 0) {
            rotation -= ((360 - lastAngle) + angle);
        } else {
            rotation += (lastAngle + (360 - angle));
        }
    } else {
        rotation += deltaAngle;
    }
    
    // save current measurement
    lastAngle = angle;
    
    return angle;
}

function getDirection(degrees) {
	return ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'][Math.round(degrees / 11.25 / 2)];
}

Responses

0 Replies