我认为这个问题众所周知。
那我的问题是什么?
我正在编写一个使用GPS提供商的应用程序来查找用户的位置并计算从用户到终点的距离。这工作正常。但是会出现问题:
详细问题:
如果你带着我的应用程序环游城市,它会给你一些距离的数字,但......距离正在改变。无论我是否朝着我的目的地移动,距离要么越来越高或越来越低(计算的距离的值是从高到低“跳跃”,反之亦然)前一个距离的数量,但逻辑上它应该越来越低。我相信这是因为GPS信号有时会丢失或变弱,而且无法正确计算距离。
我需要帮助吗?
我想知道有没有办法过滤从GPS接收到的坐标,这样我就可以得到更准确的距离数,所以当我向终点移动时,距离计算正确(尽可能不必为100%)正确)而不是像疯了一样上下。
如何获取坐标并计算距离:
public void onLocationChanged(Location location)
{
txtLat = (TextView) findViewById(R.id.currentCoordinatesView);
clat = location.getLatitude();
clong = location.getLongitude();
Location location1 = new Location("Start");
location1.setLatitude(clat);
location1.setLongitude(clong);
Location locationB = new Location("Finish");
locationB.setLatitude(endLatitude); //endpoint coordinates
locationB.setLongitude(endLongitude);
distance = location1.distanceTo(locationB); //calculate the distance
TextView TextDistance = (TextView)findViewById(R.id.TextDistance);
TextDistance.setText(new DecimalFormat("##,###,###.##").format(distance)+" m");
CurLat = location.getLatitude();
CurLong = location.getLongitude();
答案 0 :(得分:2)
通过保存最后的10个位置对象并根据这些对象进行计算,可以进一步改善以下答案。例如,如果10个最后位置表明用户以1米/秒的速度向目标移动,那么表明5米跳跃的新位置很可能是不准确的,应该被忽略。
要过滤一些已更新的GPS,您可以简单地执行此类操作(3表示相对于您的实际位置的位置应该是多么准确并且可以调整):
public void onLocationChanged(Location location)
{
if (location.hasAccuracy() && location.getAccuracy() < 3) {
txtLat = (TextView) findViewById(R.id.currentCoordinatesView);
clat = location.getLatitude();
clong = location.getLongitude();
Location location1 = new Location("Start");
location1.setLatitude(clat);
location1.setLongitude(clong);
Location locationB = new Location("Finish");
locationB.setLatitude(endLatitude); //endpoint coordinates
locationB.setLongitude(endLongitude);
distance = location1.distanceTo(locationB); //calculate the distance
TextView TextDistance = (TextView)findViewById(R.id.TextDistance);
TextDistance.setText(new DecimalFormat("##,###,###.##").format(distance)+" m");
CurLat = location.getLatitude();
CurLong = location.getLongitude();
}
}
的准确度度量的定义
获取此位置的估计精确度(以米为单位)。 我们将准确度定义为68%置信度的半径。换句话说,如果您绘制一个以此位置的纬度和经度为中心的圆,并且半径等于精度,那么真实位置在圆内的概率为68%。
在统计学术语中,假设位置误差是随机的,具有正态分布,因此68%置信圆表示一个标准偏差。请注意,在实践中,位置错误并不总是遵循这样简单的分布。
此准确度估算仅涉及水平精度,如果包含在此位置,则不表示方位,速度或高度的准确性。
如果此位置没有准确性,则返回0.0。 LocationManager生成的所有位置都包含准确度。