Как переместить маркер на карте в новые координаты?

Что я хочу сделать. В этом коде я создал символ с положением камеры. Все, что я хотел бы сделать, это оживить символ на карте с другим набором координат, который я бы жестко запрограммировал на данный момент. Я пробовал много вещей, но не могу понять, как заставить это работать.

Что я пробовал. Я видел два примера SDK Mapbox для Android и пробовал их варианты, чтобы маркер переместился в другую точку, но я очень растерялся:

В этом примере используется Object Animator: https://docs.mapbox.com/android/maps/examples/animate-marker-position/

В этом примере не используются аниматоры, а просто обновляется символ на основе координат: https://docs.mapbox.com/android/maps/examples/api-response-icon-update/

Где я сейчас? Я наконец решил просто обновить символ, и в документации было указано, что мне нужно его использовать:

AnnotationManager.update (Аннотация).

но я не знаю как. Пожалуйста, помогите, я застрял очень долго и чувствую себя потерянным. Спасибо.

Ссылка на символ, говорящая об использовании этого: https://docs.mapbox.com/android/api/plugins/annotation/0.4.0/com/mapbox/mapboxsdk/plugins/annotation/Symbol.html#setLatLng-LatLng-

Изображение того, что я хотел бы сделать: Анимировать символ до точки < / а>

P.S. Стоит ли мне просто попробовать Object Animator?

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Mapbox.getInstance(this, getString(R.string.access_token));

        setContentView(R.layout.activity_main);

        mapView = findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull final MapboxMap mapboxMap) {
                mapboxMap.setStyle(Style.LIGHT, new Style.OnStyleLoaded(){
                    @Override
                    public void onStyleLoaded(@NonNull Style style){

                        //Import Icon
                        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                                R.drawable.blue_icon);

                        style.addImage(ID_IMAGE_SOURCE, icon);
                        style.addSource(new GeoJsonSource("source-id"));

                        //Create Symbol
                        SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);

                        symbolManager.setIconAllowOverlap(true);
                        symbolManager.setIconIgnorePlacement(true);


                        Symbol symbol = symbolManager.create(new SymbolOptions()
                                .withLatLng(new LatLng(33.718492, -117.796390))
                                .withIconImage(ID_IMAGE_SOURCE)
                                .withIconSize(.25f));

                        //Camera Position and Bounds
                        LatLngBounds latLngBounds = new LatLngBounds.Builder()
                                .include(new LatLng(33.717872, -117.796296))
                                .include(new LatLng(33.718342, -117.797975))
                                .build();

                        mapboxMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds,
                                        30));

person A4_TS    schedule 03.12.2019    source источник


Ответы (2)


Это решено. Нужен аниматор из Android SDK. Слишком много было изменено в моем исходном коде, чтобы разместить все это здесь. Если вы столкнетесь с той же проблемой, дайте мне знать, и я помогу.

person A4_TS    schedule 04.12.2019
comment
Я столкнулся с той же проблемой. Я не мог анимировать SymbolOptions в новую позицию, все, что я мог сделать, это удалить аннотации из SymbolManager и создать новые SymbolOptions с новой позицией. Есть ли шанс предложить свое решение? - person Thracian; 22.01.2020
comment
Используйте этот пример: docs.mapbox.com/android/maps/examples / animate-marker-position. Вместо использования сенсорного прослушивателя для этого кода введите то место, куда вы хотите переместить маркер. Сначала попробуйте это, а затем, если нужно, вернитесь ко мне. - person A4_TS; 22.01.2020

Я обнаружил, что с помощью диспетчера символов легко обновлять позиции маркеров.

 //ADD VARIABLES 
 private SymbolManager symbolManager;
 private Symbol originIcon;
 

Инициализируйте изображения и диспетчер символов при настройке стилей картографического окна.

mapboxMap.setStyle(
            new Style.Builder()
                    .fromUri(styleUrl)
                    
                    // Add the SymbolLayer icon image to the map style
                    .withImage(ICON_ORIGIN, BitmapFactory.decodeResource(
                            this.getResources(), R.drawable.searchorigin)),
            style -> {


                // create symbol manager object
                symbolManager = new SymbolManager(mapView, mapboxMap, style);
                // set non-data-driven properties, such as:
                symbolManager.setIconAllowOverlap(true);
                symbolManager.setIconTranslate(new Float[]{-4f, 5f});
                symbolManager.setIconRotationAlignment(ICON_ROTATION_ALIGNMENT_VIEWPORT);

            });

Затем используйте диспетчер символов, чтобы создать значок и обновить позиции.

//CHECK IF THE MARKER IS INITIALIZE
        if (originIcon == null) {
            // Add symbol at specified lat/lon
            originIcon = symbolManager.create(new SymbolOptions()
                    .withLatLng(new LatLng(location.latitude(), location.longitude()))
                    .withIconImage(ICON_ORIGIN)
                    .withIconSize(0.5f));
        }else{
            //UPDATE THE ICON BY USING SYMBOLMANAGER
            originIcon.setLatLng(new LatLng(location.latitude(), location.longitude()));
            symbolManager.update(originIcon);
        }
person user9876747    schedule 10.09.2020