Closed poorcoder closed 8 years ago
I solved my problem with bellow snippet... My case was how can I update bearing value via sensor data... I hope this will help someone...
function lowPass(input, output) {
if(output.length == 0) return input;
for (var i = 0; i < input.length; i++) {
output[i] = output[i] + 0.2 * (input[i] - output[i]);
}
return output
}
function onMapReady(args) {
console.log("onMapReady");
var mapView = args.object;
console.log("Setting a marker...");
var marker = new mapsModule.Marker();
marker.position = mapsModule.Position.positionFromLatLng(40.958637, 29.080519);
marker.title = "İstanbul";
marker.snippet = "Türkiye";
// marker.icon = "~/images/navigation_icon.png";
var icon = new Image();
var bearing = 0
var output = []
icon.imageSource = imageSource.fromResource('navigation_icon');
marker.icon = icon;
marker.userData = { index: 1 };
mapView.addMarker(marker);
// start
var windowManager = application.android.context.getSystemService(android.content.Context.WINDOW_SERVICE);
var sensorManager = application.android.foregroundActivity.getSystemService(android.content.Context.SENSOR_SERVICE);
var listener = new android.hardware.SensorEventListener({
onAccuracyChanged: (sensor, accuracy) => {
// console.dir(accuracy)
},
onSensorChanged: (event) => {
var oldValue = Math.round(output[0])
output = lowPass(event.values, output);
switch ( windowManager.getDefaultDisplay().getRotation()) {
case Surface.ROTATION_90:
output[0] = output[0] + 90;
break;
case Surface.ROTATION_180:
output[0] = output[0] + 180;
break;
case Surface.ROTATION_270:
output[0] = output[0] - 90;
break;
}
if(Math.abs(Math.round(output[0]) - bearing) < 8) {
//console.log("return ")
return
}
bearing = Math.round(output[0])
mapView.set("bearing", bearing);
//console.log("---------------------------")
//console.log(" oldValue:" + oldValue)
//console.log(" bearing: " + bearing)
//console.log(" dif: " + Math.abs(oldValue - bearing))
//console.log("---------------------------")
}
});
var surface = sensorManager.getDefaultSensor(android.hardware.Sensor.TYPE_ORIENTATION)
sensorManager.registerListener(listener, surface, 500)
}
How can I retrieve current location and change compass status...