android – 如何计算地图中不同标记的距离,然后选择最少的一个

前端之家收集整理的这篇文章主要介绍了android – 如何计算地图中不同标记的距离,然后选择最少的一个前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须从地图上的不同标记距离到设备的当前位置,并选择最短的位置.我有标记的纬度和长度,并且可以动态地获取当前位置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计算).

在最近的制造商搜索的开始和结束时,只需以毫秒为单位打印出当前时间,您将看到它足够快.

原文链接:https://www.f2er.com/android/310609.html

猜你在找的Android相关文章