从坐标列表中查找最近的位置

时间:2014-06-19 20:16:15

标签: google-maps-api-3 google-geocoding-api

我想从位置数组(lat,lng)找到给定地址(用户输入)的最近位置。

(或者,更好的是,按距离对照片进行排序)

我希望在不显示地图的情况下实现此目的。 我也不确定哪种Google API最适合这种情况(Geocoding API,Maps v3等)。

最好的办法是什么?

如果有人能指出我正确的方向,我们将不胜感激。

位置:

[
    {
        // Amsterdam
        "lat": 52.3702157,
        "lng": 4.8951679
    },
    {
        // Berlin
        "lat": 52.5200066,
        "lng": 13.404954
    },
    {
        // Brussels
        "lat": 50.85,
        "lng": 4.35
    },
    {
        // Paris
        "lat": 48.856614,
        "lng": 2.3522219
    },
    {
        // Madrid
        "lat": 40.4167754,
        "lng": -3.7037902
    }
]

用户输入: Antwerp

{
    "lat": 51.2194475,
    "lng": 4.4024643
}

应该返回: Brussels

{
    "lat": 50.85,
    "lng": 4.35
}

或者,按距离排序:

[
    {
        // Brussels
        "lat": 50.85,
        "lng": 4.35
    },
    {
        // Amsterdam
        "lat": 52.3702157,
        "lng": 4.8951679
    },
    {
        // Paris
        "lat": 48.856614,
        "lng": 2.3522219
    },
    {
        // Berlin
        "lat": 52.5200066,
        "lng": 13.404954
    },
    {
        // Madrid
        "lat": 40.4167754,
        "lng": -3.7037902
    }
]

1 个答案:

答案 0 :(得分:0)

Android为您提供了一个很好的功能,它可以计算距离(DistanceTo())(参考:http://developer.android.com/reference/android/location/Location.html)下面是一个例子,如何使用DistanceTo与谷歌地图api:

    private double CalculateDistance(LatLng endPoint)
    {
        //Convert LatLng to Location
        Location location = new Location("tmploc");
        location.Latitude = endPoint.Latitude;
        location.Longitude = endPoint.Longitude;
        location.Time = currentLocation.Time; //Set time as current position's time. (could also be datetime.now)
        return currentLocation.DistanceTo(location);
    }

然后,您可以使用它来查找最低值:

public int Lowest(params int[] inputs)
{
  return inputs.Min();
}

(参考:https://stackoverflow.com/a/4390808/3861983

如果您执行使用第一种方法的方法,请将其添加到数组中,然后从第二种方法中获取最小数字。你将实现你的目标。