Mapbox my-location漂移android

时间:2016-12-10 11:41:30

标签: android mapbox

我在Android上使用MapBox(使用Nexus 5x在7.0和7.1上测试过),设置相当简单(见下文)。奇怪的是,当手机没有移动或被使用时,地图开始漂移,好像我四处走动一样。下面的代码示例是要复制的最小值。我添加了一个额外的位置监听器,并将其附加到Mapbox。有趣的是,当我漂流时,没有日志进入位置变化,这让我觉得它是Mapbox SDK(4.1.1)中的一个错误。

对可能发生的事情的任何想法?

public class MainActivity extends AppCompatActivity {

    private MapView mMapView;
    private MapboxMap mMap;
    private LocationManager mLocationManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMapView = (MapView) findViewById(R.id.map);
        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mMapView.onCreate();
        mMapView.getMapAsync(this::onMapReady);
        // To keep the example short I'm skipping the permissions.
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_MIN_TIME,
            GPS_UPDATE_MIN_DISTANCE, this::onLocationChanged);
    }

    @Override
    public void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
        mMapView.onSaveInstanceState(state);
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    private void onMapReader(MapboxMap map) {
        mMap = map;
        mMap.getTrackingSettings()
                .setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
        mMap.setOnMyLocationChangeListener(this::onLocationChanged);
    }

    private onLocationChanged(Location location) {
            Log.d("Map", "Mapbox location @ " + location.getLatitude() + ", " + location.getLongitude());
    }
}

布局是:

    <com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:style_url="@string/mapbox_style_url"
        app:tilt="45"
        app:scroll_enabled="false"
        app:zoom_enabled="false"
        app:rotate_enabled="false"
        app:logo_enabled="false"
        app:attribution_enabled="false"
        app:my_location_enabled="true"
        app:compass_enabled="false"/>

2 个答案:

答案 0 :(得分:1)

好的,所以这里的问题是在地图视图初始化期间(以及对moveCamera的任何调用时)都会重置跟踪模式。解决方案是添加:

mMap.getTrackingSettings()
        .setDismissLocationTrackingOnGesture(false);

答案 1 :(得分:1)

我也遇到过这样的事情。我不认为它与TrackingSettings#setDismissLocationTrackingOnGesture(false)有任何关系,尽管您可能想要调用它,因为您正在设置跟踪模式。

您所描述的内容听起来像TRACKING_FOLLOWa bug I submitted一起启用。 Mapbox Android SDK使用融合的位置传感器而不是普通的GPS。我注意到它有时会丢失我的GPS位置,或者至少优先考虑基于网络的位置。发生这种情况时,位置精度圆变得非常大,位置标记在最近的单元塔方向漂移。