计算Android / Google地图中的行进距离

时间:2014-02-03 19:35:40

标签: java

我正在研究跟踪系统,它涉及跟踪用户路径。我在计算距离时遇到了麻烦。我一直在使用起始位置以及最近的位置更新,但这并不计算实际距离。在onLocationChanged方法中,我将位置传递给我的updateDistance函数。我知道路线需要分成几段,然后每个段值加到总数中,但我无法解决问题。

我搜索了网站,我知道有一些类似的主题,但我没有找到解决我的问题所以我会感激任何帮助。这是我到目前为止计算距离的函数。

private void updateDistance(Location location) {
    Log.i("updateDistance", "In distance function");
    locationA = new Location("point A");
    locationB = new Location("point B");

    locationA.setLatitude(firstlat);
    locationA.setLongitude(firstlon);

    lat = location.getLatitude();
    lon = location.getLongitude();

    locationB.setLatitude(lat);
    locationB.setLongitude(lon);
    // Calculate the distance between them
    distance = locationA.distanceTo(locationB);
    // if less than 10 metres, do not record
    if (distance < 10.00) {
        Log.i("DISTANCE", "Values too close, so not used.");
    } else
    tv1.setText("Distance Travelled: " + distanceTravelled + " metres");
}

2 个答案:

答案 0 :(得分:1)

保持运行总计。而不是找到从新位置到firstlat,firstlon位置的距离,找到从新位置到前一位置的距离,并将该距离添加到您的总位置。

在您的updateDistance方法所在的类中创建一个成员变量,该变量包含以前的位置。最初将其设置为起始位置。还要创建一个成员变量来保存总距离,最初设置为0.在updateDistance方法中,计算给定位置与先前位置(最初将是起始位置)之间的距离,并将其添加到总距离。然后将当前位置分配给上一个位置变量。

public class YourClass {
    private Location prevLocation = startingLocation;
    private double distance = 0d;

    private void updateDistance(Location location) {
        double distanceToLast = location.distanceTo(prevLocation);
        // if less than 10 metres, do not record
        if (distanceToLast < 10.00) {
            Log.i("DISTANCE", "Values too close, so not used.");           
        } else
            distance += distanceToLast;
            prevLocation = location;
        }
        tv1.setText("Distance Travelled: " + distance + " metres");
    }
}

答案 1 :(得分:0)

此时我太糊涂了,但最后我得到了一个解决方案。

这是解决方案。

将位置值存储在 onCreate 方法中的另一个变量中 (很重要)

location = locationManager.getLastKnownLocation(provider);
oldLocation=location;

然后每次调用onLocationChanged时都更新它。

    @Override
    public void onLocationChanged(Location location) {

            if (location != null) {

                // locationManager.removeUpdates(mylistener);
                lat_new = location.getLatitude();
                lon_new = location.getLongitude();

                float distance = oldLocation.distanceTo(location);
                // speed = distance / time;

                distanceCovered = distanceCovered + distance;
                Toast.makeText(getActivity(),
                        "distance covered " + distanceCovered,
                        Toast.LENGTH_SHORT).show();

                oldLocation = location;

        }
    }

每当调用onLocationChanged时,它将给出总距离。

简单明了。

祝你有美好的一天!