首页 > 解决方案 > 查找位置之间的距离

问题描述

我正在尝试确定一种方法来识别一组位置中哪个位置最接近用户。我首先尝试确定两个位置之间的距离。到目前为止,我编写代码的方式只能让我确定这个距离一次——即用户只接近一个位置。我正在使用自定义位置提供程序来获取经纬度。我的代码如下。做了很多研究来解决这个问题,但我发现的解决方案要么已经过时,要么对于应该是一项简单的任务来说似乎太复杂了。任何帮助将不胜感激。

@Override
    public void gotCurrentLocation (Location location) {
        Location locCL = new Location("");
        locCL.setLatitude(location.getLatitude());
        locCL.setLongitude(location.getLongitude());

    Location locIFC = new Location("");
    locIFC.setLatitude(xxxx);
    locIFC.setLongitude(xxxx);

    Location locBGC = new Location ("" );
   locBGC.setLatitude(xxxx);
   locBGC.setLongitude(xxxx);

   float distanceInMeters = locCL.distanceTo(locIFC);
    float distanceInMeters = locCL.distanceTo(locBGC);
}

标签: androidmapping

解决方案


  /**
 * @param startLat  gps lat
 * @param startLong gps lon
 * @param endLat    exti lat
 * @param endLong   exit long
 * @return distance in KM
 * @since 02040215
 * <p>Distance, bearing and more between Latitude/Longitude points</p>
 * <p> R is earth’s radius (mean radius = 6,371km)</p>
 * <p/>
 * <p>var lat1Red = lat1.toRadians();</p>
 * <p>var lat2Red = lat2.toRadians();</p>
 * <p>var delLat = (lat2 - lat1).toRadians();</p>
 * <p>var delLong = (lon2 - lon1).toRadians();</p>
 * <p>var a = Math.sin(delLat / 2) * Math.sin(delLat / 2) +</p>
 * <p> Math.cos(delLat) * Math.cos(lat2Red) *</p>
 * <p> Math.sin(delLong / 2) * Math.sin(delLong / 2);</p>
 * <p> var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));</p>
 * <p>  var d = R * c;</p>
 * <p/>
 * *
 */

public double calculateDistanceBetween2Point(double startLat, double startLong, double endLat, double endLong) {
    /**         *  R is earths radius (mean radius = 6,371km)         */
    double earthR = 6371e3;
    double dagToRad = Math.PI / 180;
    double radStartLat;
    double radStartLong;
    double radEndLat;
    double radEndLong;
    double distance = 0;
    double dalLat;
    double dalLong;

    radStartLat = startLat * dagToRad;
    radStartLong = startLong * dagToRad;
    radEndLat = endLat * dagToRad;
    radEndLong = endLong * dagToRad;

    dalLat = radEndLat - radStartLat;
    dalLong = radEndLong - radStartLong;

    double a = Math.sin(dalLat / 2) * Math.sin(dalLat / 2) + Math.cos(radStartLat) *
            Math.cos(radEndLat) * Math.sin(dalLong / 2) * Math.sin(dalLong / 2);

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    distance = earthR * c;

    return distance;
}

我想这会对你有所帮助。


推荐阅读