使用Google Maps Places API从一系列位置查找离当前位置最近的位置

时间:2013-04-11 10:23:00

标签: java android google-places-api google-maps-android-api-2

我的array包含不同的locations' addresses。我还检索了用户的当前位置。

在数组中的所有位置中,我想找到nearest的位置。一种方法可能是比较Lat-Long,但还有其他方法可以解决吗?

注意: 我是not performing nearby location search来检索地址。假设我已将它们存储在一个数组中。

2 个答案:

答案 0 :(得分:4)

您可以使用Location来确定两个地址之间的距离:

private static float distance(LatLng current, LatLng last){
    if(last==null)
        return 0;
    Location cL = new Location("");
    cL.setLatitude(current.latitude);
    cL.setLongitude(current.longitude);

    Location lL = new Location("");
    lL.setLatitude(last.latitude);
    lL.setLongitude(last.longitude);

    return lL.distanceTo(cL);
}

答案 1 :(得分:0)

如果您需要最近的真实位置,请使用Location.distanceBetween

如果您有很多地点并且要求代码执行得更快,我建议您使用以下公式:

double diffLat = Math.abs(lat1 - lat2);
double diffLng = Math.abs(lng1 - lng2);
if (diffLng > 180) {
    diffLng = 360 - diffLng;
}
double distanceSquared = diffLat * diffLat + diffLng * diffLng;

不要计算这个的sqrt,因为不需要找到(近似)最近的位置。只需比较平方值。

if就在那里,因为您可能拥有-179和+179经度的位置,这些位置彼此接近。

根据数据的不同,您也可以尝试对已排序数据进行二分搜索的算法,但这里有2个维度,因此它不像在排序int中查找int[]那么简单。