We're displaying a number of map markers on the map representing various objects which are retrieved either from a cache or from an asynchronous network call. When these objects are retrieved, we update the camera to ensure all markers are within view:
LatLngBounds bounds = mBoundsBuilder.build();
mMapboxMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50, 100, 50, 30));
We're interested in adding the user's location to the map, and have done so using the LocationComponent
provided by MapBox as shown in this example.
The problem is that when the LocationComponent
has locationComponent .setCameraMode(CameraMode.TRACKING)
set as shown, the camera will focus on the user's location, without accommodating the markers previously set. Setting the camera mode to CameraMode.NONE
allows the markers to be shown using the code snippet above, however in this case the user's location will not be accommodated in the mBoundsBuilder
.
The obvious solution seemed to be to listen for location updates and manually add the coordinates to the mBoundsBuilder
so that the user's location is taken into account. This, however, has a number of problems, such as:
- Callbacks for location changes can be invoked many times, while the
mBoundsBuilder
should only contain a single set of coordinates for the user's location, the rest of the objects being the previously added markers. - Location updates are asynchronous, and
getLastKnownLocation
will often returnnull
.
Questions:
- Is there a default, built in way to show a user's location while making sure the camera accommodates map markers?
- If no default option exists, how can this be properly implemented?
Version:
com.mapbox.mapboxsdk:mapbox-android-sdk:6.8.1