2016-12-10 4 views
1

Ich verwende MapBox auf Android (getestet mit Nexus 5x auf 7.0 und 7.1) mit einer recht einfachen Einrichtung (siehe unten). Die seltsame Sache ist, dass die Karte beginnt zu driften, wenn das Telefon sich nicht bewegt oder benutzt wird, als ob ich herumlaufen würde. Das folgende Codebeispiel ist das zu replizierende Minimum. Ich habe einen zusätzlichen Standort-Listener hinzugefügt und ihn auch an Mapbox angehängt. Das Interessante daran ist, dass wenn ich driftet, keine Logs für den Standortwechsel kommen, was mich glauben macht, dass es ein Fehler im Mapbox SDK (4.1.1) ist.Mapbox my-location drift android

Irgendwelche Gedanken darüber, was könnte passieren?

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()); 
    } 
} 

Das Layout ist:

<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"/> 

Antwort

1

OK, so dass die Frage hier war die Tatsache, dass der Tracking-Modus war während der Initialisierung der Kartenansicht (und auf jeden Aufruf moveCamera zurückgesetzt Die. Lösung war hinzuzufügen:

mMap.getTrackingSettings() 
     .setDismissLocationTrackingOnGesture(false); 
1

ich so etwas wie dies auch erlebt habe ich glaube nicht, dass irgendetwas mit TrackingSettings#setDismissLocationTrackingOnGesture(false) zu tun hat, obwohl Sie wahrscheinlich anrufen wollen, dass Sie da sind. Einstellen eines Tracking-Modus.

Was Sie beschreiben, klingt wie TRACKING_FOLLOW aktiviert in Kombination mit a bug I submitted. Das Mapbox Android SDK verwendet einen fusionierten Standortsensor anstelle von GPS. Mir ist aufgefallen, dass es manchmal meinen GPS-Standort verliert oder zumindest dem netzwerkbasierten Standort Priorität einräumt. Wenn dies geschieht, wird der Ortsgenauigkeitskreis sehr groß und die Ortsmarkierung driftet in Richtung der nächsten Mobilfunkmasten.