Сравнение двух местоположений по долготе и широте
Hi мне нужно вызвать событие в onchangelocation (), сравнивая текущую широту и долготу с некоторой сохраненной широтой и долготой, но я получаю ошибку. eclipse не распознает ключевое слово distance, а для исправления ошибки дает подсказку методу ящика "distance", имеющему 4 параметра ... как это исправить??? или каким-то другим способом сделать то же самое???
спасибо и с уважением. код прилагается ниже
@Override
public void onLocationChanged(Location location) {
double currentLat=location.getLatitude();
double currentLon=location.getLongitude();
if (distance(lat,lon,currentLat,currentLon)<2.0){
//do what you want to do...
}
}
3 ответов
на самом деле вам нужно реализовать функцию под названием distance, которая будет вычислять расстояние между двумя местоположениями. вычисление расстояния между двумя местоположениями является одним из возможных способов сравнения значений долготы и широты.
пример их сравнения:
@Override
public void onLocationChanged(Location location) {
double lat2 = location.getLatitude();
double lng2 = location.getLongitude();
// lat1 and lng1 are the values of a previously stored location
if (distance(lat1, lng1, lat2, lng2) < 0.1) { // if distance < 0.1 miles we take locations as equal
//do what you want to do...
}
}
/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist; // output distance, in MILES
}
можно использовать класса distanceBetween()
метод вот так:
float[] distance = new float[1];
Location.distanceBetween(lat, lon, currentLat, currentLon, distance);
// distance[0] is now the distance between these lat/lons in meters
if (distance[0] < 2.0) {
// your code...
}
если у вас есть два Location
объектов, другой вариант distanceTo()
все 4 входных параметра находятся в float. Расстояние-это относительное, а не реальное расстояние. Вам нужно преобразовать это расстояние в реальное расстояние, выполнив поиск формулы онлайн : (я использовал это в своем приложении, чтобы получить ближайшую станцию метро из моего текущего местоположения. Надеюсь, этот фрагмент кому-то поможет:)
float distance(float lat,float lon,float clat,float clon)
{
float distance;
float temp1;
float temp2;
temp1=(float)((lat-clat)*(lat-clat));
temp2=(float)((lon-clon)*(lon-clon));
distance=temp1+temp2;
return distance;
}