我想从位置数组(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
}
]
答案 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)
如果您执行使用第一种方法的方法,请将其添加到数组中,然后从第二种方法中获取最小数字。你将实现你的目标。