summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2015-10-29 16:59:43 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2015-10-30 10:17:04 +0100
commit01274a5b402d0320cb18f6e37822a870bb8ec6f0 (patch)
tree890c8c06ef19319004521c39b851d1d6cba23814 /android
parentf2e51706934dd9ac30e48b662c2cb60f442be049 (diff)
downloadqtlocation-mapboxgl-01274a5b402d0320cb18f6e37822a870bb8ec6f0.tar.gz
[android] #2864 - improved compass update cycle, removed lowpassfilter
[android] #2864 changed currentTimeInMills with elapsedRealtime
Diffstat (limited to 'android')
-rw-r--r--android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/UserLocationView.java47
1 files changed, 8 insertions, 39 deletions
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/UserLocationView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/UserLocationView.java
index 68a3ed7a25..db5b320ba6 100644
--- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/UserLocationView.java
+++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/UserLocationView.java
@@ -37,8 +37,6 @@ import com.mapzen.android.lost.api.LocationRequest;
import com.mapzen.android.lost.api.LocationServices;
import com.mapzen.android.lost.api.LostApiClient;
-import java.util.ArrayDeque;
-
final class UserLocationView extends View {
private MapView mMapView;
@@ -382,8 +380,7 @@ final class UserLocationView extends View {
private GeomagneticField mGeomagneticField;
// Controls the sensor update rate in milliseconds
- private static final int UPDATE_RATE_MS = 500;
- private AngleLowPassFilter mLowPassFilter;
+ private static final int UPDATE_RATE_MS = 300;
// Compass data
private float mCompassBearing;
@@ -392,12 +389,11 @@ final class UserLocationView extends View {
public MyBearingListener(Context context) {
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mSensorRotationVector = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
- mLowPassFilter = new AngleLowPassFilter();
}
public void onStart(Context context) {
mRotationDevice = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
- mSensorManager.registerListener(this, mSensorRotationVector, UPDATE_RATE_MS * 1000);
+ mSensorManager.registerListener(this, mSensorRotationVector, UPDATE_RATE_MS * 2500);
}
public void onStop() {
@@ -414,6 +410,11 @@ final class UserLocationView extends View {
return;
}
+ long currentTime = SystemClock.elapsedRealtime();
+ if (currentTime < mCompassUpdateNextTimestamp) {
+ return;
+ }
+
switch (event.sensor.getType()) {
case Sensor.TYPE_ROTATION_VECTOR:
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
@@ -432,19 +433,13 @@ final class UserLocationView extends View {
break;
}
- mLowPassFilter.add(mOrientation[0]);
- long currentTime = System.currentTimeMillis();
- if (currentTime < mCompassUpdateNextTimestamp) {
- return;
- }
-
mCompassUpdateNextTimestamp = currentTime + UPDATE_RATE_MS;
mGeomagneticField = new GeomagneticField(
(float) mUserLocation.getLatitude(),
(float) mUserLocation.getLongitude(),
(float) mUserLocation.getAltitude(),
currentTime);
- mCompassBearing = (float) Math.toDegrees(mLowPassFilter.average()) + mGeomagneticField.getDeclination();
+ mCompassBearing = (float) Math.toDegrees(mOrientation[0] + mGeomagneticField.getDeclination());
setCompass(mCompassBearing);
}
@@ -452,32 +447,6 @@ final class UserLocationView extends View {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO add accuracy to the equiation
}
-
- private class AngleLowPassFilter {
-
- private final int LENGTH = 5;
-
- private float sumSin, sumCos;
-
- private ArrayDeque<Float> queue = new ArrayDeque<>();
-
- public void add(float radians) {
- sumSin += (float) Math.sin(radians);
- sumCos += (float) Math.cos(radians);
- queue.add(radians);
-
- if (queue.size() > LENGTH) {
- float old = queue.poll();
- sumSin -= Math.sin(old);
- sumCos -= Math.cos(old);
- }
- }
-
- public float average() {
- int size = queue.size();
- return (float) Math.atan2(sumSin / size, sumCos / size);
- }
- }
}