无法在两个地方之间获得完美的距离

Not able to get perfect distance between two places

我已经使用 Haversine 来计算两个位置之间的距离。

public static class Haversine {

    static int Radius = 6371;
    public static double haversine(double lat1, double lon1, double lat2,
            double lon2) {

        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);

         double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                    + Math.cos(Math.toRadians(lat1))
                    * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
                    * Math.sin(dLon / 2);
            double c = 2 * Math.asin(Math.sqrt(a));
            double valueResult = Radius * c;
            double km = valueResult / 1;
            DecimalFormat newFormat = new DecimalFormat("####");
            int kmInDec = Integer.valueOf(newFormat.format(km));
            double meter = valueResult % 1000;
            int meterInDec = Integer.valueOf(newFormat.format(meter));
            Log.i("Radius Value", "" + valueResult + "   KM  " + kmInDec
                    + " Meter   " + meterInDec);

            return Radius * c;

        /*double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1)* Math.cos(lat2);
        double c = 2 * Math.asin(Math.sqrt(a));

        return R * 2 * Math.asin(Math.sqrt(a));*/
    }



}

从上面的代码我无法获得 2 个位置之间的准确距离。

当我 运行 上面的方法然后它从我的两个地方显示 4.32 km 但是当我检查 google map 然后它显示 5.3 km .

我也使用了 Location.distanceBetween 方法仍然显示 4.32 km .

我怎样才能得到位置之间的准确距离?

你可以看到这个link。 Haversine 和 Location.distanceBetween 方法都是原点到直线所在的点。
因此,您可以使用 http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=false 来获取实际距离。

来自 Google 官方存储库 link

SphericalUtil

MathUtil

用法

 double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));

上述方法将returns 两个LatLngs 之间的距离,以米为单位。 或者试试这个

private String getDistance(LatLng my_latlong,LatLng frnd_latlong){
 Location l1=new Location("One");
 l1.setLatitude(my_latlong.latitude);
 l1.setLongitude(my_latlong.longitude);

 Location l2=new Location("Two");
 l2.setLatitude(frnd_latlong.latitude);
 l2.setLongitude(frnd_latlong.longitude);

 float distance=l1.distanceTo(l2);
 String dist=distance+" M";

  if(distance>1000.0f)
   {
     distance=distance/1000.0f;
     dist=distance+" KM";
   }

 return dist;

}

或者你可以看看link