2015-11-04 29 views
0

我已经使用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位置之间的确切距离。

当我运行上述mehtod然后显示4.32 km从我的两个地方,但当我检查google map然后它显示5.3 km

我也用过Location.distanceBetween方法,它仍然显示4.32 km

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

+0

看一看http://stackoverflow.com/questions/1502590/calculate-distance-between-two-points-in -google-maps-v3 –

+0

我已经看到了。在此基础上实施。 – deepak

+0

我想上面的公式会计算位移而不是距离。您可以使用Google Maps Distance Matrix Api。 https://developers.google.com/maps/documentation/distance-matrix/intro –

回答

1

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

+0

哦......所以'Haversine'并不准确,因为这个原因。 但我怎么可以在'android'中使用它? – deepak

+0

这是不正确的方式来获得距离取决于谷歌最新docs.this将不会为你工作.. https://developers.google.com/maps/documentation/distance-matrix/intro –

0

从谷歌官方库link

SphericalUtil

MathUtil

使用

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

将返回两个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