【问题标题】:Calculating speed from set of longitude and latitudes values obtained in one minute?从一分钟内获得的一组经度和纬度值计算速度?
【发布时间】:2017-10-31 16:33:24
【问题描述】:

我需要每 10 秒或更短时间计算一次速度(目前我正在使用融合位置 api 来每 10 秒后获取位置)。问题是设备太慢,有时距离覆盖为零。

我尝试过使用 Location.distanceBetween() 但即使设备在移动它也会产生零。我试图通过公式计算距离,但有时距离太小以至于它为零。

现在我想计算平均速度。我想保存在 1 分钟内获得的点(6 lat long 值)。然后每 10 秒后,我想计算它们之间的平均速度。因此,每 10 秒后,我将在末尾添加一个点,并从开始删除一个点。这将消除零的可能性。

现在是否有任何公式可以根据一组经纬度值计算速度或距离,或者任何更好的方法将受到高度赞赏。

【问题讨论】:

    标签: java android google-maps distance


    【解决方案1】:

    您可以使用简单的几何图形计算足够近的两点之间的距离

    deltaLngMeters = R * cos(latitude) * deltaLongitudeRadians;
    deltaLatMeters = R * deltaLatitudeRadians;
    

    而增量以弧度为单位,deltaLatitudeRadians = deltaLatitudeDegrees * pi / 180

    因此distance = sqrt(deltaLngMeters ^2 + deltaLatMeters ^ 2)

    总结一下

    function distance(point1, point2) {
        var degToRad = Math.PI / 180;
        return R * degToRad * Math.sqrt(Math.pow(Math.cos(point1.lat * degToRad ) * (point1.lng - point2.lng) , 2) + Math.pow(point1.lat - point2.lat, 2));
    }
    

    如果你有六个点的数组,你可以计算平均速度。

    points = [{lat: .., lng: ..}, ... ]; // 6 points
    distancesSum = 0; 
    for(i = 0; i < distances.length - 1; i++) {
        distancesSum += distance(points[i], points[i + 1]);
    }
    return (distancesSum / (points.length - 1));
    

    是的,R 是地球半径,R = 6371000;// meters

    【讨论】:

    • 我一定会试一试...R的价值是多少?你指的是地球的半径???
    • 对。坐标是地球的,所以半径是同一个星球的:)
    【解决方案2】:

    您可以使用多线程(Thread.sleep())每隔 10 秒重复计算一个公式。你可以在这里验证https://beginnersbook.com/2013/03/multithreading-in-java/

    【讨论】:

      【解决方案3】:

      对于小距离(希望设备不会以超过 1 km/s 的速度移动),地球表面可以被视为一个平面。那么纬度和经度将是设备在连接到地球的笛卡尔平面上的坐标。因此,您可以通过以下公式计算距离:

      √(delta(longitude)^2 + delta(latitude)^2)
      

      增量:差异

      【讨论】:

      • 不,你不能。你想得到什么,米?
      • 我知道纬度和经度是角度。如果您知道地球的半径,将 delta(latitude) 和 delta(longitude) 转换为米很简单。
      • 你不能求和度数,因为附录之一乘以cos(latitude)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2011-08-16
      • 2010-09-28
      • 2011-07-06
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多