package com.michaldabski.panoramio.utils;
import com.michaldabski.panoramio.models.Photo;
import java.util.Comparator;
/**
* Created by Michal on 10/08/2014.
*
* Comparator used to sort photos by proximity
*/
public class PhotoDistanceComparator implements Comparator<Photo>
{
private final float userLat, userLong;
public static double distance(float lat1, float lon1, float lat2, float lon2)
{
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
return 6366000 * c;
}
private float distanceToUser(float lat, float lng)
{
float dist = (float) distance(userLat, userLong, lat, lng);
return dist;
}
private Float getPhotoDistance(Photo photo)
{
return distanceToUser(photo.getLatitude(), photo.getLongitude());
}
public PhotoDistanceComparator(float userLat, float userLong)
{
this.userLat = userLat;
this.userLong = userLong;
}
@Override
public int compare(Photo photo, Photo photo2)
{
return getPhotoDistance(photo)
.compareTo(getPhotoDistance(photo2));
}
}