计算Google Maps v2上当前位置和标记之间的距离

时间:2015-05-03 15:54:49

标签: java android google-maps haversine

我是新来的......请帮助我

我想开发用于计算用户当前位置和标记之间距离的Android应用程序。它将计算用户触摸制造商时的距离。我想使用Haversine Formula,但我不知道如何将当前位置和标记坐标输入到公式中...例如,StartP将是我当前的位置坐标,EndP将是我的标记坐标。

public double CalculationByDistance(LatLng StartP, LatLng EndP) {
    int Radius=6371;//radius of earth in Km         
    double lat1 = StartP.latitude;
    double lat2 = EndP.latitude;
    double lon1 = StartP.longitude;
    double lon2 = EndP.longitude;
    double dLat = Math.toRadians(lat2-lat1);
    double dLon = Math.toRadians(lon2-lon1);
    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;
 }

1 个答案:

答案 0 :(得分:0)

公式接受的参数属于LatLng类型。现在你没有指定代码中的任何地方。
但是在函数本身中,您会发现所有给出函数的是起点和终点的纬度和经度。因此,如果您难以为此功能提供输入,那么您可以这样做 该函数需要双值形式的纬度和经度。你从地图中得到的是纬度和经度的双倍值。 所以,你可以直接将它们传递给这个函数。

public double CalculationByDistance(double latitude1, double longitude1, double latitude2, double longitude2) {
        int Radius=6371;//radius of earth in Km         
        double lat1 = latitude1;
        double lat2 = latitude2;
        double lon1 = longitude1;
        double lon2 = longitude2;
        double dLat = Math.toRadians(lat2-lat1);
        double dLon = Math.toRadians(lon2-lon1);
        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("####");
        Integer kmInDec =  Integer.valueOf(newFormat.format(km));
        double meter=valueResult%1000;
        Integer  meterInDec= Integer.valueOf(newFormat.format(meter));
        System.out.println("Radius Value "+valueResult+"   KM  "+kmInDec+" Meter   "+meterInDec);

        return Radius * c;
     }

其中latitude1longitude1是起点的坐标,2是终点的坐标。