UnifiedNlp/api/src/org/microg/nlp/api/LocationHelper.java
mar-v-in 8ff926120c Major cleanup, Add support for Geocoder
Using spaces for indentation from now on
Add support for forced locations (debug)
2014-12-25 12:49:33 +01:00

89 lines
2.9 KiB
Java

package org.microg.nlp.api;
import android.location.Location;
import android.os.Bundle;
import java.util.Collection;
public final class LocationHelper {
private LocationHelper() {
}
public static Location create(String source) {
return new Location(source);
}
public static Location create(String source, double latitude, double longitude,
float accuracy) {
Location location = create(source);
location.setLatitude(latitude);
location.setLongitude(longitude);
location.setAccuracy(accuracy);
return location;
}
public static Location create(String source, double latitude, double longitude, float altitude,
Bundle extras) {
Location location = create(source, latitude, longitude, altitude);
location.setExtras(extras);
return location;
}
public static Location create(String source, double latitude, double longitude, double altitude,
float accuracy) {
Location location = create(source, latitude, longitude, accuracy);
location.setAltitude(altitude);
return location;
}
public static Location create(String source, double latitude, double longitude, double altitude,
float accuracy, Bundle extras) {
Location location = create(source, latitude, longitude, altitude, accuracy);
location.setExtras(extras);
return location;
}
public static Location create(String source, long time) {
Location location = create(source);
location.setTime(time);
return location;
}
public static Location create(String source, long time, Bundle extras) {
Location location = create(source, time);
location.setExtras(extras);
return location;
}
public static Location average(String source, Collection<Location> locations) {
if (locations == null || locations.size() == 0) {
return null;
}
int num = locations.size();
double latitude = 0;
double longitude = 0;
float accuracy = 0;
int altitudes = 0;
double altitude = 0;
for (Location value : locations) {
if (value != null) {
latitude += value.getLatitude();
longitude += value.getLongitude();
accuracy += value.getAccuracy();
if (value.hasAltitude()) {
altitude += value.getAltitude();
altitudes++;
}
}
}
Bundle extras = new Bundle();
extras.putInt("AVERAGED_OF", num);
if (altitudes > 0) {
return create(source, latitude / num, longitude / num, altitude / altitudes,
accuracy / num, extras);
} else {
return create(source, latitude / num, longitude / num, accuracy / num, extras);
}
}
}