Этого можно добиться с помощью слоя символов в последнем SDK 6.7.0.
Чтобы добавить маркер:
Bitmap compassNeedleSymbolLayerIcon = BitmapFactory.decodeResource(
getResources(), R.drawable.compass_needle);
mapboxMap.addImage(AIRCRAFT_MARKER_ICON_ID, compassNeedleSymbolLayerIcon);
GeoJsonSource geoJsonSource = new GeoJsonSource(GEOJSON_SOURCE_ID, Feature.fromGeometry(
Point.fromLngLat(longitude, latitude)));
mapboxMap.addSource(geoJsonSource);
SymbolLayer Layer = new SymbolLayer(AIRCRAFT_LAYER_ID, GEOJSON_SOURCE_ID)
.withProperties(
PropertyFactory.iconImage(AIRCRAFT_MARKER_ICON_ID),
PropertyFactory.iconRotate((float) headDirection),
PropertyFactory.iconIgnorePlacement(true),
PropertyFactory.iconAllowOverlap(true)
);
mapboxMap.addLayer(layer);
Чтобы повернуть или изменить положение маркера:
GeoJsonSource source = mapboxMap.getSourceAs(GEOJSON_SOURCE_ID);
if (source != null) {
source.setGeoJson(Feature.
fromGeometry(Point.fromLngLat(longitude, latitude)));
layer.setProperties(
PropertyFactory.iconRotate((float) headDirection)
);
}
Приведенный выше код может иногда не работать при добавлении маркера в обратный вызов onMapReady () .Потому что onMapReady () вызывается до загрузки всех стилей.Следовательно, добавьте маркер в addOnDidFinishLoadingStyleListener () обратный вызов.
mapView.addOnDidFinishLoadingStyleListener(new MapView.OnDidFinishLoadingStyleListener() {
@Override
public void onDidFinishLoadingStyle() {
//add marker here
}
});