2

我正在创建一个ArrayList纬度/经度坐标,然后想要获取所有这些并找到总行驶距离。但是我当前的代码一直返回 0。有人可以告诉我我做错了什么吗?

public float getDistanceTraveled() {
    float[] dist = new float[1];
    float totalDist = 0;

        for(int i = 0; locs.size()-2 >= i; i++) {
            double lat1 = locs.get(i).getLatitude();
            double lon1 = locs.get(i+1).getLongitude();
            double lat2 = locs.get(i).getLatitude();
            double lon2 = locs.get(i+1).getLongitude();

            Location.distanceBetween(lat1, lon1, lat2, lon2, dist);
            totalDist += dist[0];
            Log.d("", "totaldist " + String.valueOf(totalDist));

        }
        return totalDist;       
}
4

3 回答 3

4

看起来像一个小类型-o的情况,不应该是这样吗:

double lat1 = locs.get(i).getLatitude();
double lon1 = locs.get(i).getLongitude();
double lat2 = locs.get(i+1).getLatitude();
double lon2 = locs.get(i+1).getLongitude();

编辑:看起来莫里森打败了我

于 2012-08-05T02:43:36.483 回答
2

所以你得到了同一点之间的距离,还是从一个点的纬度和另一个点的距离?

        double lat1 = locs.get(i).getLatitude();
        double lon1 = locs.get(i+1).getLongitude();
        double lat2 = locs.get(i).getLatitude();
        double lon2 = locs.get(i+1).getLongitude();
于 2012-08-05T02:39:44.293 回答
0

您的方法的问题在于,这将是乌鸦飞翔的方式,但是如果我从一个航路点出发,绕一个弯然后沿着另一条街道走,看起来我在走 2 英里时就走了 100m。

因此,除非您获取足够数量的点来处理道路弯曲和人们走不同道路的问题,否则您的点数将与使用导航器查看距离的情况大不相同。

正如其他人提到的你的错字我不会详细说明为什么距离为零,但你可能想考虑你的方法。

现在,如果用户正在步行或骑自行车,您的方法可能没问题,但对于驾驶,您可能需要进行大量测试,看看您是否对差异感到满意。

于 2012-08-05T02:55:18.973 回答