Fused Location API 在地图中绘制时会给出不准确的纬度和长度,即使对于低准确度值,它也会稍微远离道路路径
Posted
技术标签:
【中文标题】Fused Location API 在地图中绘制时会给出不准确的纬度和长度,即使对于低准确度值,它也会稍微远离道路路径【英文标题】:Fused Location API gives Inaccurate Lat, Long when plotting in map it is slightly away from the road path even for low accuracy value 【发布时间】:2015-02-18 03:18:06 【问题描述】:Google 提供融合位置提供程序 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
当我在地图上看到这个点时,这些点不在路上。他们离马路稍远。 其他具有相同精度的点绘制在道路上。当我完全 zoom and see 时,一些点稍微远离行进的道路路径。
我想要准确的信息。它的点必须在道路路径中。
我已使用Fused Location API 获取位置信息。
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
.addApi(LocationServices.API).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
分享您的建议。如果我使用Location manager 会解决我的问题吗? 而且我只需要消耗更少的电池。 Fused API 保证它只消耗更少的功率和更高的效率。
Fused Location API 也存在以下问题,
无法获取卫星计数。 总是返回 FUSED 提供程序。不完全给出哪个提供商(GPS 或网络)返回位置信息。 当这两个提供商都不可用时,您永远不会收到通知。当没有提供者可用时,它不会返回任何值。要检查提供商的可用性,我们需要单独向位置管理器注册。这会消耗更多的电量。
请帮助我。提前致谢。
【问题讨论】:
我使用 locationmager gpsstatus 监听器和 fused 提供者的位置来锁定。它工作得很好。我有代码github.com/danny117/MapMover。我只是在禁用 gps 时设置了一个按钮。 ***.com/questions/24804652/… 【参考方案1】:使用直接的位置提供程序,您不会击败融合提供程序的准确性或功耗。
融合位置提供程序以米/秒报告速度,以米为单位报告准确度。您拥有的示例点精确到 12 米。美国车道定义为3.7m。凭借 12m 的精度,您可以在任何方向偏离 12/3.7=3.25 条车道。我不能这么说。 如果您想要准确,则必须检查位置的准确性。
How to get more accuracy by GPS_PROVIDER
LatLng and distance between returning incorrect values on newer phones
can't find the exact current location in android
Android Maps GPS outlier
Fused Location Provider unexpected behavior
调整您的程序以处理该点的准确性。例如,假设该点是正确的,围绕该点画一个圆,半径 = 位置精度。
【讨论】:
其实我认为这可能是 FusedLocationAPI 的问题。当我使用 Loaction Manager API 时,相同精度的位置数据被绘制在相同的道路路径中。但是在使用 Fused API 的时候就稍微有点远了。 你在路上做了两次传球,还是同时两次传球?我只是扔掉任何不符合我的准确性标准的东西,最终会出现另一个更准确的位置。 我还定义了小于 50 的准确度标准。两天同一时间相同的路径。第一天测试了融合的 api。第二天我测试了位置管理器。 我认为你说你不会打败它的准确性是错误的。我对fused location provider
和android location provider
的准确性进行了多次测试,可以说android location provider
给出了更准确的结果。
在我试驾汽车时,我有无数小时来测试这些。 ***.com/questions/23889834/…accuracy 你检查准确度。【参考方案2】:
无法保证来自 GPS 和其他提供商的位置数据位于道路上。这些传感器没有必要的映射上下文来将原始位置信号捕捉到道路。要使用原始数据实现此目的,您可以使用 snap to road API。 Google Maps 和 OSM 等地图提供商有办法做到这一点:
Google Maps snap to roads API OSRM match service如果您正在寻找一种能够为您提供道路位置数据的端到端解决方案,您还可以尝试使用适用于 Android 的HyperTrack SDK,它会收集和处理位置数据以提高其准确性。 (免责声明:我在 HyperTrack 工作。)
另外,为了回答您的其他问题,FusedLocationProviderApi
不会公开卫星数量和提供商信息。要获取提供者信息,您可以设置 GpsStatus.Listener
类。这可以与应用程序中的融合提供程序并行使用,以检查设备是否具有 GPS 定位。您可以使用以下代码 sn-p 进行设置:
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";
【讨论】:
以上是关于Fused Location API 在地图中绘制时会给出不准确的纬度和长度,即使对于低准确度值,它也会稍微远离道路路径的主要内容,如果未能解决你的问题,请参考以下文章
使用 android fused location api 在 MyLocation 上未显示蓝点
使用 Fused Location API,Marshmallow 不会使用 location.getSpeed()
Google Fused Location API 导致错误(Android)
如何使用 FUSED LOCATION API 优化电池 - Android