Bob*_*obs 15 gps android location
我开发了一个Android应用程序,用于存储用户的GPS位置.
我的一位客户给了我他的设备,我注意到有时设备的准确性非常糟糕且令人难以置信.有时,设备返回距实际位置约200公里的点.
您可以在该设备的以下GPS位置示例中看到此信息.你看到两点距离真实位置约200公里.
该设备是三星SM-T111与Android 4.2.2,我只使用GPS提供商获取位置(LocationManager.GPS_PROVIDER).
我想知道导致问题的原因是什么,这种不准确?
我直接存储从提供商处收到的积分.这是我的代码onLocationChanged:
UPDATE
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 12
我想知道这种不准确的问题是什么?
最有可能的是硬件/固件.换句话说,怪三星.
它不太可能是你的应用程序.假设您为这些失败点获得的准确度值在MAX_DISTANCE_TOLERANCE,并且假设MAX_DISTANCE_TOLERANCE小于200km,则您忠实地使用您获得的数据.如果这些数据有缺陷,那些缺陷就来自系统本身.
您可以创建更具适应性的过滤器.除了测试准确性之外MAX_DISTANCE_TOLERANCE,您还可以:
Location)例如,您的第一个错误修复在前一个错误修复后20分钟.除非您认为该设备可能以600公里/小时的速度行驶,否则您将拒绝这个不良修复是不切实际的.
只有在您进行一些一致的修复后,此算法才有效.您可能会要求快速的位置更新几分钟,检查数据,抛弃任何异常值,然后应用"设备真的可以走得那么远吗?" 测试未来的修复.
如果您不信任Google的Fused API或任何其他算法,并且您对NMEA格式化的原始GPS数据有所了解,那么我建议您深入了解原始GPS数据,并了解实际情况.
您可以从GPS芯片组获取NMEA_0183 GPS消息,并分析卫星星座,SNR,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");
}});
Run Code Online (Sandbox Code Playgroud)
以下是一些有用的NMEA句子:
小智 3
如果您使用的是 Google 融合位置提供商,那么这些错误肯定会发生,因此,如果您想要最准确的结果并将其限制为仅 GPS,那么请使用 Android 位置框架而不是 Google Play 服务位置 API。
如果您想继续使用 Google 的位置 API,您还可以过滤主要距离变化。
| 归档时间: |
|
| 查看次数: |
2601 次 |
| 最近记录: |