我正在研究跟踪系统,它涉及跟踪用户路径。我在计算距离时遇到了麻烦。我一直在使用起始位置以及最近的位置更新,但这并不计算实际距离。在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");
}
答案 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时,它将给出总距离。
简单明了。
祝你有美好的一天!