将Lat lng与一组数据库数据进行比较的算法

时间:2014-03-30 18:34:40

标签: android performance algorithm

我正在制作计划安排程序Android应用程序。

数据是这样的:

Place
========
lat 
lng 
duration (e.g. 0.5 hour)
isPerferred 

所以我必须根据cirteria获得一个地方列表,例如。给了5个小时,得到一组地方。

问题是,无论偏好是什么,我都必须比较lat lng并获得最新选择的地方最近的地方,但性能是一个值得关注的问题,除了比较之外还有任何实现方法吗? lat lng一个接一个?感谢

public double getDistance(double lat1, double lon1, double lat2, double lon2) {
        if (lat1 == lat2 && lon1 == lon2)
            return 0;

        double latA = Math.toRadians(lat1);
        double lonA = Math.toRadians(lon1);
        double latB = Math.toRadians(lat2);
        double lonB = Math.toRadians(lon2);
        double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) +
                    (Math.sin(latA) * Math.sin(latB));
        double ang = Math.acos(cosAng);
        double dist = ang *6371;
        return dist;
    }

1 个答案:

答案 0 :(得分:1)

修改 Location.distanceBetween正是您所需要的:

distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)