Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用LatLng在google map v2中获取以公里为单位的两个地方之间的距离_Android_Google Maps - Fatal编程技术网

Android 如何使用LatLng在google map v2中获取以公里为单位的两个地方之间的距离

Android 如何使用LatLng在google map v2中获取以公里为单位的两个地方之间的距离,android,google-maps,Android,Google Maps,在我的android应用程序中, 我必须计算用户当前位置和用户在地图上点击的点之间的距离。 我用这个函数来计算: public double CalculationByDistance(LatLng StartP, LatLng EndP) { int Radius=6371;//radius of earth in Km double lat1 = StartP.latitude; double lat2 = EndP.latitude

在我的android应用程序中, 我必须计算用户当前位置和用户在地图上点击的点之间的距离。 我用这个函数来计算:

     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;
    }

但结果是我走了很长的一段距离,例如,两个地方之间的距离大约是10947公里,大约只有20米远。有人能帮我吗?

Android提供了计算两个纬度/经度点之间距离的方法

android.location.Location.distanceBetween(double startLatitude,
    double startLongitude, double endLatitude, double endLongitude, float[] results)
使用此方法:

        private double distance(double lat1, double lon1, double lat2,
            double lon2) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
                + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
                * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        return (dist);
    }

或者只是检查一下这个

关于哈弗森方程的搜索。以下是一个以米为单位返回距离的实现:

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.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);

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

    return R * c;
}

式中,R=6371000

以公里为单位计算距离的方法

public static double distanceKM(double lat1, double lon1, double lat2,
            double lon2) {
        int EARTH_RADIUS_KM = 6371;
        double lat1Rad = Math.toRadians(lat1);
        double lat2Rad = Math.toRadians(lat2);
        double deltaLonRad = Math.toRadians(lon2 - lon1);

        double dist_travelled = Math
                .acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad)
                        * Math.cos(lat2Rad) * Math.cos(deltaLonRad))
                * EARTH_RADIUS_KM;

        dist_travelled = Double.parseDouble(new DecimalFormat("##.######")
                .format(dist_travelled));
        return dist_travelled;

    }

你能提供deg2rad方法吗?请参阅此链接。。。