Java 类android.hardware.GeomagneticField 实例源码
项目:uds
文件:QtLocation.java
public void onLocationChanged(Location location)
{
// TODO Auto-generated method stub
double[] getData=new double[8];
GeomagneticField geomagneticField = new GeomagneticField((float)location.getLatitude(),
(float)location.getLongitude(), (float)location.getAltitude(),location.getTime());
getData[0]=location.getLatitude();
getData[1]=location.getLongitude();
getData[2]=location.getAltitude();
getData[3]=location.getTime();
//these are for attributes
getData[4]=location.getBearing();//bearing
getData[5]=location.getSpeed();//ground speed
getData[6]=geomagneticField.getDeclination();//magnetic dip
getData[7]=location.getAccuracy();//vertical and horizontal accuracy
locationDataUpdated(getData,location.getProvider());
}
项目:Multiwii-Remote
文件:Sensors.java
@Override
public void onLocationChanged(Location location) {
oldLocation = this.location;
this.location = location;
PhoneLatitude = location.getLatitude();
PhoneLongitude = location.getLongitude();
PhoneAltitude = location.getAltitude();
PhoneSpeed = location.getSpeed() * 100f;
PhoneAccuracy = location.getAccuracy() * 100f;
//MapCurrentPosition = new LatLng(location.getLatitude(), location.getLongitude());
geoField = new GeomagneticField(Double.valueOf(location.getLatitude()).floatValue(), Double.valueOf(location.getLongitude()).floatValue(), Double.valueOf(location.getAltitude()).floatValue(), System.currentTimeMillis());
Declination = geoField.getDeclination();
if (mGPSListener != null)
mGPSListener.onSensorsStateGPSLocationChange();
}
项目:pebble-navigation
文件:WatchService.java
void locationUpdate(Location currentLocation){
if(!currentLocation.getProvider().equals("gps")) return;
// calculate declination at this point. This is done only once as it shouldn't change so much at similar location on earth ;)
//only run this if first time!
if (declination > 999){
GeomagneticField geomagneticField = new GeomagneticField((float)currentLocation.getLatitude(),
(float)currentLocation.getLongitude(), (float)currentLocation.getAltitude(),currentLocation.getTime());
declination = geomagneticField.getDeclination();
}
float distance = currentLocation.distanceTo(geocacheLocation);
float deviceBearing = currentLocation.getBearing();
float azimuth = currentLocation.bearingTo(geocacheLocation);
if(azimuth < 0) azimuth = 360 + azimuth;
if(deviceBearing < 0) deviceBearing = 360 + deviceBearing;
float bearing = azimuth - deviceBearing;
if(bearing < 0) bearing = 360 + bearing;
updateWatchWithLocation(distance, bearing, azimuth);
}
项目:Forage
文件:LocationUtils.java
/**
* Gets the magnetic declination at the specified location.
*
* @param location Current location.
* @return The declination of the horizontal component of the magnetic
* field from true north, in degrees (i.e. positive means the
* magnetic field is rotated east that much from true north).
*/
public static double getMagneticDeclination(@NonNull Location location) {
GeomagneticField geoField = new GeomagneticField(
(float) location.getLatitude(),
(float) location.getLongitude(),
(float) location.getAltitude(),
System.currentTimeMillis()
);
return geoField.getDeclination();
}
项目:Simple-Android-Compass-Assistant
文件:CompassAssistant.java
/**
* initializes a CompassAssistant with a context and a Location. If you use this constructor the
* resulting degrees will be calculated with the declination for the given location. The compass
* will point to the geographic north.
* @param context the context
* @param l the location to which the CompassAssistant should refer its pointing.
*/
public CompassAssistant(final Context context, Location l) {
this.context = context;
if (l != null) {
GeomagneticField geomagneticField = new GeomagneticField((float)l.getLatitude(),
(float)l.getLongitude(), (float)l.getAltitude(), new Date().getTime());
declination = geomagneticField.getDeclination();
}
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
项目:uds
文件:QtLocation.java
public double[] lastKnownPosition(int fromSatellitePositioningMethodsOnly)
{
double[] getData=new double[7];
Location location=null;
Location networkLastLocation=null;
Location gpsLastLocation=null;
try
{
networkLastLocation=m_locationManager.getLastKnownLocation(GPS);
gpsLastLocation=m_locationManager.getLastKnownLocation(NETWORK);
if(fromSatellitePositioningMethodsOnly == 1)
{
location=gpsLastLocation;
}
else
{
location=(networkLastLocation.getTime()>gpsLastLocation.getTime())
?networkLastLocation:gpsLastLocation;
}
GeomagneticField geomagneticField = new GeomagneticField((float)location.getLatitude(),
(float)location.getLongitude(), (float)location.getAltitude(),location.getTime());
getData[0]=location.getAltitude();
getData[1]=location.getLatitude();
getData[2]=location.getLongitude();
getData[3]=location.getTime();
getData[4]=geomagneticField.getDeclination();
getData[5]=location.getSpeed();
getData[6]=location.getBearing();
}
catch(Exception e)
{
Log.i("QtLocation","LastknownLocation not available");
}
return getData;
}
项目:trekarta
文件:LocationInformation.java
private void updateLocation(double latitude, double longitude, int zoom) {
mLatitude = latitude;
mLongitude = longitude;
mZoom = zoom;
mCoordinateDegree.setText(StringFormatter.coordinates(0, " ", latitude, longitude));
mCoordinateDegMin.setText(StringFormatter.coordinates(1, " ", latitude, longitude));
mCoordinateDegMinSec.setText(StringFormatter.coordinates(2, " ", latitude, longitude));
mCoordinateUtmUps.setText(StringFormatter.coordinates(3, " ", latitude, longitude));
mCoordinateMgrs.setText(StringFormatter.coordinates(4, " ", latitude, longitude));
if (BuildConfig.FULL_VERSION) {
mSunriseSunset.setLocation(latitude, longitude);
double sunrise = mSunriseSunset.compute(true);
double sunset = mSunriseSunset.compute(false);
if (sunrise == Double.MAX_VALUE || sunset == Double.MAX_VALUE) {
mSunrise.setText(R.string.never_rises);
mSunsetTitle.setVisibility(View.GONE);
mSunset.setVisibility(View.GONE);
} else if (sunrise == Double.MIN_VALUE || sunset == Double.MIN_VALUE) {
mSunset.setText(R.string.never_sets);
mSunriseTitle.setVisibility(View.GONE);
mSunrise.setVisibility(View.GONE);
} else {
mSunrise.setText(mSunriseSunset.formatTime(sunrise));
mSunset.setText(mSunriseSunset.formatTime(sunset));
mSunriseTitle.setVisibility(View.VISIBLE);
mSunrise.setVisibility(View.VISIBLE);
mSunsetTitle.setVisibility(View.VISIBLE);
mSunset.setVisibility(View.VISIBLE);
}
mOffset.setText(StringFormatter.timeO((int) (mSunriseSunset.getUtcOffset() * 60)));
GeomagneticField mag = new GeomagneticField((float) latitude, (float) longitude, 0.0f, System.currentTimeMillis());
mDeclination.setText(String.format(Locale.getDefault(), "%+.1f\u00B0", mag.getDeclination()));
}
}
项目:stardroid
文件:RealMagneticDeclinationCalculator.java
/**
* Sets the user's current location and time.
*/
@Override
public void setLocationAndTime(LatLong location, long timeInMillis) {
geomagneticField = new GeomagneticField(location.getLatitude(),
location.getLongitude(),
0,
timeInMillis);
}
项目:android_maplibui
文件:CompassFragment.java
public static float getDeclination(Location location, long timestamp) {
if (location == null)
return 0;
GeomagneticField field = new GeomagneticField((float) location.getLatitude(), (float) location.getLongitude(),
(float) location.getAltitude(), timestamp);
return field.getDeclination();
}
项目:bearing-example
文件:BearingToNorthProvider.java
private GeomagneticField getGeomagneticField(Location location)
{
GeomagneticField geomagneticField = new GeomagneticField(
(float)location.getLatitude(),
(float)location.getLongitude(),
(float)location.getAltitude(),
System.currentTimeMillis());
return geomagneticField;
}
项目:Artoria
文件:LocationMgrImpl.java
public GeomagneticField getGeomagneticField() {
Location location = getCurrentLocation();
GeomagneticField gmf = new GeomagneticField(
(float) location.getLatitude(),
(float) location.getLongitude(),
(float) location.getAltitude(), System.currentTimeMillis());
return gmf;
}
项目:osmdroid
文件:SampleHeadingCompassUp.java
@Override
public void onOrientationChanged(final float orientationToMagneticNorth, IOrientationProvider source) {
//note, on devices without a compass this never fires...
//only use the compass bit if we aren't moving, since gps is more accurate when we are moving
if (gpsspeed < 0.01) {
GeomagneticField gf = new GeomagneticField(lat, lon, alt, timeOfFix);
trueNorth = orientationToMagneticNorth + gf.getDeclination();
gf = null;
synchronized (trueNorth) {
if (trueNorth > 360.0f) {
trueNorth = trueNorth - 360.0f;
}
float actualHeading = 0f;
//this part adjusts the desired map rotation based on device orientation and compass heading
float t = (360 - trueNorth - this.deviceOrientation);
if (t < 0) {
t += 360;
}
if (t > 360) {
t -= 360;
}
actualHeading = t;
//help smooth everything out
t = (int) t;
t = t / 5;
t = (int) t;
t = t * 5;
mMapView.setMapOrientation(t);
updateDisplay(actualHeading,false);
}
}
}
项目:osmLib
文件:OsmAndLocationProvider.java
private float calcGeoMagneticCorrection(float val) {
if (previousCorrectionValue == 360 && getLastKnownLocation() != null) {
OsmLocation l = getLastKnownLocation();
GeomagneticField gf = new GeomagneticField((float) l.getLatitude(), (float) l.getLongitude(), (float) l.getAltitude(),
System.currentTimeMillis());
previousCorrectionValue = gf.getDeclination();
}
if (previousCorrectionValue != 360) {
val += previousCorrectionValue;
}
return val;
}
项目:fire_reporter
文件:CompassFragment.java
public static float getDeclination(Location location, long timestamp) {
if(location == null)
return 0;
GeomagneticField field = new GeomagneticField((float) location.getLatitude(), (float) location.getLongitude(),
(float) location.getAltitude(), timestamp);
return field.getDeclination();
}
项目:Androzic
文件:Androzic.java
@Override
public void onLocationChanged(final Location location, final boolean continous, final boolean geoid, final float smoothspeed, final float avgspeed)
{
Log.d(TAG, "Location arrived");
final long lastLocationMillis = location.getTime();
if (angleMagnetic && lastLocationMillis - lastMagnetic >= magInterval)
{
GeomagneticField mag = new GeomagneticField((float) location.getLatitude(), (float) location.getLongitude(), (float) location.getAltitude(), System.currentTimeMillis());
magneticDeclination = mag.getDeclination();
lastMagnetic = lastLocationMillis;
}
Androzic.this.location[0] = location.getLatitude();
Androzic.this.location[1] = location.getLongitude();
shouldEnableFollowing = shouldEnableFollowing || lastKnownLocation == null;
lastKnownLocation = location;
gpsEnabled = gpsEnabled || LocationManager.GPS_PROVIDER.equals(location.getProvider());
gpsContinous = continous;
gpsGeoid = geoid;
if (overlayManager.accuracyOverlay != null && location.hasAccuracy())
{
overlayManager.accuracyOverlay.setAccuracy(location.getAccuracy());
}
}
项目:nextgismobile_old
文件:CompassFragment.java
public static float getDeclination(Location location, long timestamp) {
if(location == null){
return 0;
}
GeomagneticField field = new GeomagneticField((float) location.getLatitude(), (float) location.getLongitude(),
(float) location.getAltitude(), timestamp);
return field.getDeclination();
}
项目:ARKOST
文件:LocationMgrImpl.java
public GeomagneticField getGeomagneticField() {
Location location = getCurrentLocation();
GeomagneticField gmf = new GeomagneticField(
(float) location.getLatitude(),
(float) location.getLongitude(),
(float) location.getAltitude(), System.currentTimeMillis());
return gmf;
}
项目:android-compass
文件:SensorsActivity.java
/**
* {@inheritDoc}
*/
@Override
public void onLocationChanged(Location location) {
if (location == null) throw new NullPointerException();
currentLocation = (location);
gmf = new GeomagneticField((float) currentLocation.getLatitude(), (float) currentLocation.getLongitude(), (float) currentLocation.getAltitude(),
System.currentTimeMillis());
}
项目:GPSTracker
文件:Route.java
@Override
public void onSensorChanged(SensorEvent event) {
// get the angle around the z-axis rotated
if (event.sensor == mMagneticSensor) {
System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
} else if (event.sensor == mAccelerometer) {
System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
float azimuthInRadians = mOrientation[0];
float azimuthInDegress = (float) (Math.toDegrees(azimuthInRadians) + 360) % 360;
mTargetDirection = azimuthInDegress;
}
float azimuth = -mTargetDirection;
GeomagneticField geoField = new GeomagneticField( Double
.valueOf( mLastLocation.getLatitude() ).floatValue(), Double
.valueOf( mLastLocation.getLongitude() ).floatValue(),
Double.valueOf( mLastLocation.getAltitude() ).floatValue(),
System.currentTimeMillis() );
if(geoField.getDeclination()<0) {
azimuth += geoField.getDeclination(); // converts magnetic north into true north
}else{
azimuth -= geoField.getDeclination();
}
//Correct the azimuth
azimuth = (azimuth+360) % 360;
//get the bearing
float y = (float)Math.sin(Math.toRadians(target.getLongitude()-mLastLocation.getLongitude())) * (float)Math.cos(Math.toRadians(target.getLatitude()));
float x = (float)Math.cos(Math.toRadians(mLastLocation.getLatitude()))*(float)Math.sin(Math.toRadians(target.getLatitude())) -
(float)Math.sin(Math.toRadians(mLastLocation.getLatitude()))*(float)Math.cos(Math.toRadians(target.getLatitude()))*(float)Math.cos(Math.toRadians(target.getLongitude()-mLastLocation.getLongitude()));
float bearing = (float)Math.toDegrees(Math.atan2(y, x));
image.setRotation(azimuth+bearing);
}
项目:corsaire
文件:NavigationService.java
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "position gps accuracy : " + location.getAccuracy());
if (location.getAccuracy() > 30) {
return;
}
this.location = location;
Log.i(TAG, "locationChanged");
Log.i(TAG, "distance jusqu'au prochain : " + location.distanceTo(current.end));
Step old = current;
current = getCurrentPoint(location);
distance = Math.round(location.distanceTo(current.end));
//Orientation
GeomagneticField field = new GeomagneticField(
(float) location.getLatitude(),
(float) location.getLongitude(),
(float) location.getAltitude(),
System.currentTimeMillis()
);
// getDeclination returns degrees
mDeclination = field.getDeclination();
double lat1 = location.getLatitude();
double lng1 = location.getLongitude();
double lat2 = current.end.getLatitude();
double lng2 = current.end.getLongitude();
double dLon = (lng2 - lng1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
angle = Math.toDegrees((Math.atan2(y, x)));
Calendar before = Calendar.getInstance();
before.add(Calendar.SECOND, -40);
if (!current.equals(old) || firstime) {
showDirection(old);
//showDirection();
firstime = false;
lastShowDirection = location;
if(!firstime && sharedPref.getBoolean(getString(R.string.pref_vibrate_key),false) && vibrator != null){
vibrator.vibrate(500);
}
} else if (lastShowDirection.distanceTo(location)>50 && (!(current instanceof TransitStep) || current.end.distanceTo(location)<100)) {
showDirection();
lastShowDirection = location;
} else if (!this.arrived && current.equals(itinerary.steps.getLast()) && current.end.distanceTo(location) < 10){
//Arrivée à destination
this.arrived = true;
showDirection(old);
}
send(UPDATE_CODE, new Bundle());
}
项目:custom-maps
文件:LocationTracker.java
@Override
public void onLocationChanged(Location location) {
if (location == null || isQuitting) {
return;
}
long now = System.currentTimeMillis();
if (currentLocation != null) {
// Never overwrite recent GPS location with a NETWORK location
if (location.getProvider().equals(LocationManager.NETWORK_PROVIDER) &&
currentLocation.getProvider().equals(LocationManager.GPS_PROVIDER) &&
now < lastGpsTime + GPS_EXPIRATION) {
return;
}
// Ignore updates that come out of order from the same location provider
if (location.getProvider().equals(currentLocation.getProvider()) &&
location.getTime() < currentLocation.getTime()) {
return;
}
}
// Update magnetic declination once every minute
// -- diff between "true north" and magnetic north in degrees
if (declinationTime + 60000 < now) {
declinationTime = now;
GeomagneticField magneticField = new GeomagneticField(
(float) location.getLatitude(), (float) location.getLongitude(),
location.hasAltitude() ? (float) location.getAltitude() : 100f, // use 100m if not known
declinationTime);
compassDeclination = Float.valueOf(magneticField.getDeclination());
}
// If there is no bearing (lack of motion or network location), use latest compass heading
if (!location.hasBearing() || !location.hasSpeed() || location.getSpeed() < 0.5f) {
location.setBearing(compassHeading);
}
// Apply geoid height correction to altitude, if reported
if (location.hasAltitude() && GeoidHeightEstimator.isInitialized()) {
int geoidCm =
GeoidHeightEstimator.computeGeoidHeight(location.getLatitude(), location.getLongitude());
location.setAltitude(location.getAltitude() - Math.round(geoidCm / 100f));
}
// Update current location
if (currentLocation != null) {
currentLocation.set(location);
} else {
currentLocation = new Location(location);
}
if (location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
lastGpsTime = now;
}
updateSpeedAndAltitude(location);
}
项目:GlassNjslyr
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:cgeo-wear
文件:LocationUtils.java
/**
* Handles compass rotation.
*/
@Override
public final void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
gravity = event.values.clone();
} else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
geomagnetic = event.values.clone();
}
if(gravity != null && geomagnetic != null) {
float[] R = new float[9];
float[] I = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, gravity, geomagnetic);
if(success) {
final float[] orientation = new float[3];
SensorManager.getOrientation(R, orientation);
float azimuth = (float) (Math.toDegrees(orientation[0]) + 360) % 360;
if(currentLocation != null) {
final float smoothedLatitude = smoothSensorValues(
oldLatitude, (float) currentLocation.getLatitude(), 1 / 3f);
final float smoothedLongitude = smoothSensorValues(
oldLongitude, (float) currentLocation.getLongitude(), 1 / 3f);
final float smoothedAltitude = smoothSensorValues(
oldAltitude, (float) currentLocation.getAltitude(), 1 / 3f);
GeomagneticField geomagneticField = new GeomagneticField(
smoothedLatitude,
smoothedLongitude,
smoothedAltitude,
System.currentTimeMillis()
);
azimuth -= geomagneticField.getDeclination();
final float bearing = currentLocation.bearingTo(geocacheLocation);
final float newDirectionRaw = (360 - (azimuth-bearing)) % 360;
final float newDirection = smoothSensorValues(oldDirection, newDirectionRaw, 1 / 5f);
//Set old values to current values (for smoothing)
oldDirection = newDirection;
oldLatitude = smoothedLatitude;
oldLongitude = smoothedLongitude;
oldAltitude = smoothedAltitude;
//Send direction update to Android Wear if update interval has passed
final long currentTime = System.currentTimeMillis();
if((currentTime - prevTime) > COMPASS_UPDATE_INTERVAL) {
onDirectionUpdateListener.onDirectionUpdate(newDirection);
prevTime = currentTime;
}
}
}
}
}
项目:commons-android
文件:SensorUtils.java
public static float getLocationDeclination(Location location) {
return new GeomagneticField((float) location.getLatitude(), (float) location.getLongitude(), (float) location.getAltitude(), location.getTime())
.getDeclination();
}
项目:casa-glass
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(), (float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:orientation-recorder
文件:SensorsOrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:gdk-line-sample
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:kitty-compass
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:SpeedHud
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:PTVGlass
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:PTVGlass
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:WalkersGuide-Android
文件:SensorsManager.java
public void locationChanged(Location location) {
// geomagnetic offset
if (location.hasAltitude()) {
GeomagneticField geoField = new GeomagneticField(
Double.valueOf(location.getLatitude()).floatValue(),
Double.valueOf(location.getLongitude()).floatValue(),
Double.valueOf(location.getAltitude()).floatValue(),
System.currentTimeMillis());
differenceToTrueNorth = geoField.getDeclination();
}
// load bearing values of GPS and compass
int bearingOfGPS = bearingOfMagneticField[0];
if (location.hasBearing())
bearingOfGPS = (int) location.getBearing();
// if the application was put into background, use GPS as bearing source and remember
// the priour bearing source, so that we can switch back imediately when the app comes
// into foreground again
if (globalData.applicationInBackground()) {
if (lastBearingSource == null) {
lastBearingSource = settingsManager.getBearingSource();
settingsManager.setBearingSource(SettingsManager.BearingSource.GPS);
}
} else {
if (lastBearingSource != null) {
settingsManager.setBearingSource(lastBearingSource);
lastBearingSource = null;
}
// check, if the diff between the location bearing value and the current compass is
// smaller than the defined threshold
// 0 <= diff <= 180
int diff = Math.abs(bearingOfGPS - bearingOfMagneticField[0]);
if (diff > 180)
diff = 360 - diff;
if (location.hasSpeed() && location.getSpeed() > 3.0) {
if (diff < smallThresholdValue || diff > 180-smallThresholdValue) {
if (matchCounter > 0)
matchCounter -= 1;
} else if (diff > bigThresholdValueDrive && diff < 180-bigThresholdValueDrive) {
if (matchCounter < maxNumberOfMatches)
matchCounter += 1;
}
} else {
if (diff < smallThresholdValue) {
if (matchCounter > 0)
matchCounter -= 1;
} else if (diff > bigThresholdValueWalk) {
if (matchCounter < maxNumberOfMatches)
matchCounter += 1;
}
}
if (matchCounter == 0 && settingsManager.useGPSAsBearingSource()) {
settingsManager.setBearingSource(SettingsManager.BearingSource.COMPASS);
messageToast.setText(
mContext.getResources().getString(R.string.messageSwitchedToCompass));
messageToast.show();
}
if (matchCounter == maxNumberOfMatches && settingsManager.useCompassAsBearingSource()) {
settingsManager.setBearingSource(SettingsManager.BearingSource.GPS);
messageToast.setText(
mContext.getResources().getString(R.string.messageSwitchedToGPS));
messageToast.show();
}
}
if (settingsManager.useGPSAsBearingSource()
&& bearingOfGPS != bearingOfDevice) {
bearingOfDevice = bearingOfGPS;
if (sListener != null)
sListener.compassValueChanged(bearingOfDevice);
}
}
项目:Androzic
文件:WaypointProject.java
public void onClick(View v)
{
try
{
Androzic application = Androzic.getApplication();
Waypoint waypoint = new Waypoint();
View view = getView();
waypoint.name = ((TextView) view.findViewById(R.id.name_text)).getText().toString();
double distance = Integer.parseInt(((TextView) view.findViewById(R.id.distance_text)).getText().toString());
double bearing = Double.parseDouble(((TextView) view.findViewById(R.id.bearing_text)).getText().toString());
int src = ((Spinner) view.findViewById(R.id.source_spinner)).getSelectedItemPosition();
int df = ((Spinner) view.findViewById(R.id.distance_spinner)).getSelectedItemPosition();
int bf = ((Spinner) view.findViewById(R.id.bearing_spinner)).getSelectedItemPosition();
double[] loc;
if (src > 0)
{
loc = new double[2];
loc[0] = waypoints.get(src-1).latitude;
loc[1] = waypoints.get(src-1).longitude;
}
else
{
loc = application.getLocation();
}
if (df == 0)
{
distance = distance / StringFormatter.distanceFactor * 1000;
}
else
{
distance = distance / StringFormatter.distanceShortFactor;
}
bearing = bearing * StringFormatter.angleFactor;
if (bf == 1)
{
GeomagneticField mag = new GeomagneticField((float) loc[0], (float) loc[1], 0.0f, System.currentTimeMillis());
bearing += mag.getDeclination();
if (bearing > 360d)
bearing -= 360d;
}
double[] prj = Geo.projection(loc[0], loc[1], distance, bearing);
waypoint.latitude = prj[0];
waypoint.longitude = prj[1];
waypoint.date = Calendar.getInstance().getTime();
application.addWaypoint(waypoint);
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
dismiss();
}
catch (Exception e)
{
Toast.makeText(getActivity(), "Invalid input", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
项目:Androzic
文件:Androzic.java
public double getDeclination(double lat, double lon)
{
GeomagneticField mag = new GeomagneticField((float) lat, (float) lon, 0.0f, System.currentTimeMillis());
return mag.getDeclination();
}
项目:gdk-compass-sample
文件:OrientationManager.java
/**
* Updates the cached instance of the geomagnetic field after a location change.
*/
private void updateGeomagneticField() {
mGeomagneticField = new GeomagneticField((float) mLocation.getLatitude(),
(float) mLocation.getLongitude(), (float) mLocation.getAltitude(),
mLocation.getTime());
}
项目:Artoria
文件:LocationFinder.java
/**
*
* @return GeomagneticField
*/
GeomagneticField getGeomagneticField();
项目:ARKOST
文件:LocationFinder.java
/**
*
* @return GeomagneticField
*/
GeomagneticField getGeomagneticField();