Android 融合位置API提供了不准确的Lat,在地图中绘制时,即使精度值较低,也会稍微远离道路路径

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 当我在地图上看到这一点时,这些点

谷歌提供融合的位置提供者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 
当我在地图上看到这一点时,这些点并不在道路上。他们离公路有点远。 其他具有相同精度的点绘制在道路上。当我完全缩放并查看时,一些点稍微远离行驶的道路路径

我想要准确的信息。它必须位于道路上

我已经使用了获取位置信息

mGoogleApiClient = new GoogleApiClient.Builder(mContext)
            .addApi(LocationServices.API).addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();
分享你的建议。如果我用它,它会解决我的问题。 而且我只需要消耗更少的电池。FusedAPI保证它只消耗更少的能量和更高的效率

而且融合位置API也有以下问题

  • 无法获取卫星计数
  • 始终返回融合的提供程序。不准确地给出哪个提供商(GPS或网络)返回位置信息
  • 当两个提供程序都不可用时,您从未收到通知。当提供程序都不可用时,它不会返回任何值。要检查提供商的可用性,我们需要单独向Location manager注册。这会消耗更多的能量
    请帮我做这个。提前谢谢

    您将无法通过直接定位提供程序打败融合提供程序的准确性或功耗

    fused location provider以每秒米为单位报告速度,以米为单位报告精度。您拥有的示例点精确到12米。美国车道的定义为。以12米的精度,您可以在任何方向偏离12/3.7=3.25车道。我说得太多了如果您想要准确,您必须检查位置的准确度。


    调整程序以处理点的精度。例如,假设该点是正确的,在该点周围画一个半径=位置精度的圆。

    无法保证来自GPS和其他提供商的位置数据位于道路上。这些传感器没有必要的映射上下文,无法将原始位置信号捕捉到道路。要通过原始数据实现这一点,可以使用snap-To-roads API。谷歌地图和OSM等地图提供商有办法做到这一点:

    如果您正在寻找一种端到端的解决方案,可以在路上提供位置数据,您也可以尝试Android SDK,它可以收集和处理位置数据,以提高其准确性。(免责声明:我在HyperTrack工作。)

    另外,为了回答您的另一个问题,
    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
    提供了更准确的结果。我在试驾汽车时花了无数个小时测试这些。准确度你检查准确度。