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

时间:2015-11-04 05:43:59

标签: java android google-maps google-maps-api-3 haversine

我使用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

如何获得位置之间的确切距离?

2 个答案:

答案 0 :(得分:1)

您可以看到此link。 Haversine和Location.distanceBetween方法都是一条线的起点。
因此,您可以使用 http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=false 来获得真正的距离。

答案 1 :(得分:0)

来自Google官方存储库link

SphericalUtil

MathUtil

<强>用法

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

上述方法将返回两个LatLng之间的距离,以米为单位。 或尝试此

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