我已经为Android开发了一个应用程序,用于存储用户的GPS位置。
我的一个顾客把他的设备给了我,我注意到,有时候这个设备的准确性很差,而且难以置信。有时,该设备返回距离实际位置约200公里的点。
您可以在该设备的以下GPS位置示例中看到这一点。你看,两个点离真正的位置大约200公里。
该设备是三星SM 111和安卓4.2.2,我只使用一个全球定位系统供应商获取位置(LocationManager.GPS_PROVIDER
)。
我想知道是什么原因造成的问题,因为这种不准确?
我直接存储从提供者收到的点。这是我在onLocationChanged
中的代码
更新
@Override
public void onLocationChanged(Location location) {
try {
if (location.getAccuracy() <= MAX_DISTANCE_TOLERANCE) {
gotLocation(new GPSLocation(location.getLatitude(),
location.getLongitude(), location.getTime(),
location.getAccuracy(),
location.getProvider(), location.getSpeed()));
}
} catch (Exception e) {
MessageBox.showExceptionToast(_context, e);
}
}
发布于 2016-11-14 13:57:58
我想知道这种不准确的问题是什么?
很可能是硬件/固件。换句话说,应该归咎于三星。
这不太可能是你的应用。假设这些失败点的精度值在MAX_DISTANCE_TOLERANCE
内,并且假定MAX_DISTANCE_TOLERANCE
小于200公里,那么您将忠实地使用所获得的数据。如果这些数据有缺陷,那么这些缺陷来自于系统本身。
你可以创建一个更自适应的滤波器。除了测试MAX_DISTANCE_TOLERANCE
的准确性之外,您还可以:
Location
上有一个静态方法)例如,您的第一次错误修复是在上一次修复20分钟之后进行的。除非你认为这个设备可以以每小时600公里的速度运行,否则你会拒绝错误的修复,因为这是不切实际的。
只有在得到一些一致的修正后,此算法才能工作。您可能要求快速更新几分钟的位置,检查这些数据,排除任何异常值,然后应用“设备真的能走那么远吗?”测试未来的修复。
发布于 2016-11-18 21:03:05
如果你不相信Google的融合API,或者任何其他算法,你对NMEA格式的原始GPS数据有一些了解,那么我建议你深入研究原始的GPS数据,看看到底发生了什么。
您可以从全球定位系统芯片组获取NMEA_0183全球定位系统信息,并分析卫星星座、信噪比、DOP、lat、lon等。
LocationManager LM = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
((LocationManager)getSystemService(Context.LOCATION_SERVICE)).requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,new LocationListener(){
@Override
public void onLocationChanged(Location loc) {}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {} });
//for API23 and below
LM.addNmeaListener(new GpsStatus.NmeaListener() {
public void onNmeaReceived(long timestamp, String nmea) {
Log.d(TAG, nmea+"\n");
}});
//for API24 and above
LM.addNmeaListener(new OnNmeaMessageListener() {
public void onNmeaMessage(String nmea, long timestamp) {
Log.d(TAG, nmea+"\n");
}});
以下是一些有用的NMEA句子:
发布于 2016-11-14 12:13:25
如果您使用的是Google融合定位提供商,那么这些错误肯定会发生,所以如果您希望获得最准确的结果并将其限制在GPS上,那么就使用Android定位框架而不是Google服务定位API。
如果您想继续使用Google的Location,也可以过滤主要的距离更改。
https://stackoverflow.com/questions/40446956
复制相似问题