Если в вашем случае использования требуется отображать на карте только около пяти маркеров одновременно, может быть проще использовать собственные источники и SymbolLayer
с, чем полагаться на абстракцию, предоставленную SymbolManager
.
Например, этот значок обновляется на основе ответа API Android demo , показывает, как добавить источник Geo JSON и соответствующий слой на карту, а затем обновить указанный источник до получить другой визуальный результат. В основном все необходимые вам логи c заключены здесь, но ваш Geo JSON будет представлять собой FeatureCollection
из множества (а именно, 5) функций, а не только одну точку.
Итак, вы можете настроить ваши символы аналогично тому, как это делается в связанном примере:
private void initSpaceStationSymbolLayer(@NonNull Style style) {
style.addImage("space-station-icon-id",
BitmapFactory.decodeResource(
this.getResources(), R.drawable.iss));
style.addSource(new GeoJsonSource("source-id"));
style.addLayer(new SymbolLayer("layer-id", "source-id").withProperties(
iconImage("space-station-icon-id"),
iconIgnorePlacement(true),
iconAllowOverlap(true),
iconSize(.7f)
));
}
, а затем обновите Geo JSON источника до новых мест, ближайших к позиции пользователя, аналогично updateMarkerPostion
Метод:
private void updateMarkerPosition(LatLng position) {
// This method is where we update the marker position once we have new coordinates. First we
// check if this is the first time we are executing this handler, the best way to do this is
// check if marker is null;
if (map.getStyle() != null) {
GeoJsonSource spaceStationSource = map.getStyle().getSourceAs("source-id");
if (spaceStationSource != null) {
spaceStationSource.setGeoJson(FeatureCollection.fromFeature(
Feature.fromGeometry(Point.fromLngLat(position.getLongitude(), position.getLatitude()))));
}
}
// Lastly, animate the camera to the new position so the user
// wont have to search for the marker and then return.
map.animateCamera(CameraUpdateFactory.newLatLng(position));
}
Конечно, потребуется внести несколько изменений, но эта опция может быть более прямой для вашей реализации.