我必须从地图上的不同标记距离到设备的当前位置,并选择最短的位置.我有标记的纬度和长度,并且可以动态地获取当前位置lat和long.
假设我在地图上有5个标记,Bangalore(Lat:12.971599,Long:77.594563),Delhi(Lat:28.635308,Long:77.224960),Mumbai(Lat:19.075984,Long:72.877656),Chennai(Lat:13.052414,Long: 80.250825),加尔各答(Lat:22.572646,Long:88.363895).
现在假设用户正站在海得拉巴附近(Lat:17.385044,Long:78.486671).当用户点击按钮时,应用程序应该计算每个标记的距离,然后拿起并返回最短的标记,这里将是班加罗尔.
任何人都可以建议我一个很好的方式来做到这一点,或者想出一个很好的代码,如果可以的话. Thanx提前.
解决方法
从你的评论我看到你最多期望70-80个地点.
这不是很多.
这不是很多.
List<Marker> markers = createMarkers(); // returns an ArrayList<Markers> from your data source int minIndex = -1; double minDist = 1E38; // initialize with a huge value that will be overwritten int size = markers.size(); for (int i = 0; i < size; i++) { Marker marker = markers.get(i); double curDistance = calcDistance(curLatitude,curLongitude,marker.latitude,marker.longitude); if (curDistance < minDist) { minDist = curDistance; // update neares minIndex = i; // store index of nearest marker in minIndex } } if (minIndex >= 0) { // now nearest maker found: Marker nearestMarker = markers.get(minIndex); // TODO do something with nearesr marker } else { // list of markers was empty }
对于calcDistance,请使用android提供的距离计算方法. (例如Location.distanceTo())
对于70-80标记,不需要使其更快更复杂.
如果你有几千点,那么值得投资一个更快的解决方案(使用空间索引和自己的距离计算,避免sqrt计算).
在最近的制造商搜索的开始和结束时,只需以毫秒为单位打印出当前时间,您将看到它足够快.