Android 融合位置API提供了不准确的Lat,在地图中绘制时,即使精度值较低,也会稍微远离道路路径
谷歌提供融合的位置提供者API来获取位置坐标。根据文档,API在内部轮询来自不同提供商(GPS、Wifi、蜂窝网络)的位置数据,并提供最佳位置。但是,在高精度模式下,我收集了以下信息。在本测试中,GPS始终处于打开状态Android 融合位置API提供了不准确的Lat,在地图中绘制时,即使精度值较低,也会稍微远离道路路径,android,gps,location,battery-saver,fusedlocationproviderapi,Android,Gps,Location,Battery Saver,Fusedlocationproviderapi,谷歌提供融合的位置提供者API来获取位置坐标。根据文档,API在内部轮询来自不同提供商(GPS、Wifi、蜂窝网络)的位置数据,并提供最佳位置。但是,在高精度模式下,我收集了以下信息。在本测试中,GPS始终处于打开状态 Latitude: 12.8560136 Longitude: 80.1997696 User Activity: IN VEHICLE Speed: 21.810165 mph Altitude: -83.0 Accuracy: 12.0 当我在地图上看到这一点时,这些点
Latitude: 12.8560136
Longitude: 80.1997696
User Activity: IN VEHICLE
Speed: 21.810165 mph
Altitude: -83.0
Accuracy: 12.0
当我在地图上看到这一点时,这些点并不在道路上。他们离公路有点远。
其他具有相同精度的点绘制在道路上。当我完全缩放并查看时,一些点稍微远离行驶的道路路径
我想要准确的信息。它必须位于道路上
我已经使用了获取位置信息
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
.addApi(LocationServices.API).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
分享你的建议。如果我用它,它会解决我的问题。
而且我只需要消耗更少的电池。FusedAPI保证它只消耗更少的能量和更高的效率
而且融合位置API也有以下问题
请帮我做这个。提前谢谢 您将无法通过直接定位提供程序打败融合提供程序的准确性或功耗 fused location provider以每秒米为单位报告速度,以米为单位报告精度。您拥有的示例点精确到12米。美国车道的定义为。以12米的精度,您可以在任何方向偏离12/3.7=3.25车道。我说得太多了如果您想要准确,您必须检查位置的准确度。
调整程序以处理点的精度。例如,假设该点是正确的,在该点周围画一个半径=位置精度的圆。无法保证来自GPS和其他提供商的位置数据位于道路上。这些传感器没有必要的映射上下文,无法将原始位置信号捕捉到道路。要通过原始数据实现这一点,可以使用snap-To-roads API。谷歌地图和OSM等地图提供商有办法做到这一点:
FusedLocationProviderApi
不会公开卫星计数和提供商信息。要获取提供者信息,可以设置GpsStatus.Listener
类。这可以与应用程序中的fused provider并行使用,以检查设备是否有GPS定位。您可以使用以下代码段进行设置:
public class GPSStatusListener implements GpsStatus.Listener {
private LocationManager locationManager;
private boolean gpsFix;
public GPSStatusListener(LocationManager locationManager) {
this.locationManager = locationManager;
}
@Override
public void onGpsStatusChanged(int changeType) {
if (locationManager != null) {
try {
GpsStatus status = locationManager.getGpsStatus(null);
switch (changeType) {
case GpsStatus.GPS_EVENT_FIRST_FIX: // Received first fix
gpsFix = true;
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS: // Check if satellites are in fix
for (GpsSatellite sat : status.getSatellites()) {
if (sat.usedInFix()) {
gpsFix = true;
break;
} else {
gpsFix = false;
}
}
break;
case GpsStatus.GPS_EVENT_STARTED: // GPS turned on
gpsFix = false;
break;
case GpsStatus.GPS_EVENT_STOPPED: // GPS turned off
gpsFix = false;
break;
default:
gpsFix = false;
return;
}
} catch (Exception e){
// Handle exception
}
}
}
public String getProvider() {
if (gpsFix) {
return "gps";
} else {
return "non_gps";
}
}
}
我使用locationmager gpsstatus侦听器执行sat锁,并使用fused provider执行位置锁定。它工作得很好。我有密码。当gps被禁用时,我只需按下一个按钮。实际上,我认为这可能是FusedLocationAPI的一个问题。使用Loaction Manager API时,相同精度的位置数据绘制在相同的道路路径中。但是当使用融合API时,它有点远。你在路上通过了两次还是同时通过了两次?我只是扔掉任何不符合我的准确度标准的东西,另一个更准确的位置最终会出现。我也被定义为准确度低于50的标准。同一条路同一时间两天。第一天我们测试了融合的api。第二天我测试了位置经理。我认为你说你不会超过它的准确性是错误的。我已经对
fused location provider
和android location provider
的准确性进行了多次测试,可以说android location provider
提供了更准确的结果。我在试驾汽车时花了无数个小时测试这些。准确度你检查准确度。