java - 获取两点之间的距离并计算出速度

标签 java android math gps

我本以为这是微不足道的,但到了最后我的大脑已经死了。

以米为单位的距离似乎有效,英里似乎被打破,速度似乎被打破。 任何帮助将不胜感激。

    public static double distFromInMiles(double lat1, double lng1, double lat2, double lng2) 
    {
        double earthRadius = 3959;
        double dLat = Math.toRadians(lat2-lat1);
        double dLng = Math.toRadians(lng2-lng1);
        double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                   Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                   Math.sin(dLng/2) * Math.sin(dLng/2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        double dist = earthRadius * c;

        return dist;
    }

    public static double distFromInMeters(double lat1, double lng1, double lat2, double lng2) 
    {
        double earthRadius = 6378137;
        double dLat = Math.toRadians(lat2-lat1);
        double dLng = Math.toRadians(lng2-lng1);
        double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                   Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                   Math.sin(dLng/2) * Math.sin(dLng/2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        double dist = earthRadius * c;

        return dist;
    }

    public static double distFromInKiloMeters(double lat1, double lng1, double lat2, double lng2) 
    {
        double earthRadius = 6371;
        double dLat = Math.toRadians(lat2-lat1);
        double dLng = Math.toRadians(lng2-lng1);
        double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                   Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                   Math.sin(dLng/2) * Math.sin(dLng/2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        double dist = earthRadius * c;

        return dist;
    }


    protected void checkDistanceFromPOI(LatLng latLng)
    {

        long thistime = System.currentTimeMillis();
        long deltatime = lasttime - thistime;

        double hours = (double)deltatime / ((double)1000.0 * (double)60.0 * (double)60.0);

        String s;
        double distFromInMeters = LocationGPSServices.distFromInMeters(lastLocationPoint.latitude, lastLocationPoint.longitude, latLng.latitude, latLng.longitude);
        double distFromInMiles = LocationGPSServices.distFromInMiles(lastLocationPoint.latitude, lastLocationPoint.longitude, latLng.latitude, latLng.longitude);
        double speed = distFromInMiles/hours;
        double speed2 = distFromInMeters/hours;

        s = "*****************distance from last point \n"
                + " lat/lng 1 = " + lastLocationPoint.toString() + "\n"
                + " lat/lng 2 = "+ latLng.toString() + "\n"
                + " in meters = " + distFromInMeters + "} \n in miles = " + distFromInMiles + " }\n "
                + " elapsed time = " + deltatime + "secs \n"
                + " speed = " + speed2 + "meters per hour \n"
                + " speed = " + speed + "miles per hour";
        Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show();
        Writer.appendText(s, "gps.txt", getActivity());
        lasttime = thistime;

    }

最佳答案

你可以只使用静态方法

Location.distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)  

您还可以使用 Location 类中的 getSpeed () 方法。

关于java - 获取两点之间的距离并计算出速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492334/

相关文章:

java - Linux 重启后 Tomcat 中的 HyperSQL 数据库被删除

java - Spring MVC 项目中的 HTTP 服务器状态 404 错误

android - 纵向模式和横向模态视图显示调整与手机大小

java - Java 中的 Math.log() 未按预期工作

math - 如何计算两个 AABB 之间的 Minkowski 差异(没有矢量数学)?

python - k-最大双重选择

java - 我收到 java.text.ParseException

java - Grails 3.x 是否支持 Java 11

android - 1.12版后如何在Flutter中禁用Proguard?

android - 如何从 background.png 和 *.png 中的图像列表(每个 image001.png、image002.png)创建视频?