Je travaille sur une application Android pour laquelle le côté serveur est en Java. Lorsque je reçois des coordonnées de l'utilisateur, je récupère une liste de restaurants, je calcule la distance de l'utilisateur et je les classe de manière ascendante.Java: Formater les distances correctement, par rapport à l'emplacement
À l'heure actuelle, tout fonctionne. Le seul problème est que la distance calculée a une très haute sensibilité. Ce que je cherche, c'est la distance indiquée de cette manière, c'est-à-dire 1.2km, 200m, 12.2km, etc., qui calcule et ajoute des Km ou des Meters de manière appropriée. Comment puis-je atteindre cet objectif?
sortie est actuellement:
Restaurant distance is 6026.203669933703
Restaurant distance is 1.0248447083638768
Restaurant distance is 1.0248447083638768
Restaurant distance is 1.0248447083638768
code
pour le calcul & de tri:
@Override
public List<Restaurant> getNearbyRestaurants(double longitude, double latitude) {
final int R = 6371; // Radius of the earth
List<Restaurant> restaurantList = this.listRestaurants();
List<Restaurant> nearbyRestaurantList = new ArrayList<>();
for(Restaurant restaurant : restaurantList){
Double latDistance = toRad(latitude-restaurant.getLatitude());
Double lonDistance = toRad(longitude-restaurant.getLongitude());
Double a = Math.sin(latDistance/2) * Math.sin(latDistance/2) +
Math.cos(toRad(latitude)) * Math.cos(toRad(restaurant.getLatitude())) *
Math.sin(lonDistance/2) * Math.sin(lonDistance/2);
Double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
Double distance = R * c;
restaurant.setDistanceFromUser(distance);
if(distance < 10){
nearbyRestaurantList.add(restaurant);
}
}
if(!(nearbyRestaurantList.isEmpty())) {
Collections.sort(nearbyRestaurantList, new Comparator<Restaurant>() {
@Override
public int compare(Restaurant o1, Restaurant o2) {
if (o1.getDistanceFromUser() > o2.getDistanceFromUser()) {
return 1;
}
if (o1.getDistanceFromUser() < o2.getDistanceFromUser()) {
return -1;
}
return 0;
}
});
for(Restaurant restaurant : restaurantList){
System.out.println("Restaurant distance is "+restaurant.getDistanceFromUser());
}
return nearbyRestaurantList;
}
return null;
}
bien vouloir me faire savoir ce que je manque. Merci beaucoup. :-)
des commentaires à ma réponse? – AlexWien
@AlexWien: Désolé, je travaille sur certains problèmes d'interface utilisateur. Est-ce que ça va si je te donne demain? Mes excuses .. :-( –