MapBox Symbol не работает как маркеры (кластеризация, нажмите ..) - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь сделать движущиеся машины на MapBox, используя новый многообещающий слой / источник GL Symbol.Это выглядит очень хорошо как на Android, так и на iOS, но я столкнулся с двумя невозможностями.

  1. Символы всегда кластеризуются.setIconAllowOverlap () и setIconIgnorePlacement () не помогают: при некотором увеличении он будет кластеризован.На обеих платформах.

Как полностью отключить кластеризацию символов ?


ОБНОВЛЕНИЕ: код и даже быстрое решение!(возможно ошибка? см. комментарий на withTextField)

in onStyleLoaded():
...
carManager = new SymbolManager(mapView, mapboxMap, style);
carManager.setIconAllowOverlap(true);//doesn't help
carManager.setIconIgnorePlacement(true);//doesn't help
...

in drawCarFunction():
...
            SymbolOptions carOptions = new SymbolOptions()
                    .withLatLng(latLng)
                    .withIconImage(carPlate)
                    //.withTextField(carPlate) //!!!! here it will cluster if text exists, and will NOT - without any text
                    ;
            Symbol car= carManager.create(carOptions);
            carSymbols.add(car);
...

Следующий вопрос:

На Android у нас есть symbolManager.addClickListener (), но как я могу отловить клик на iOS ?Я знаю, что могу поймать метчик, рассчитать ближайший маркер и т. Д., Но

Как сделать так, чтобы символ быстрее щелкал мышью?

В Задача «Движущиеся машины» Я должен перечислить существующие машины, двигаться бегом, добавить новейшие.Где я должен хранить идентификаторы автомобилей, чтобы получить их позже на следующем ходу?Где нет даже опции symbol.setTag () ... Хранение идентификаторов во фрагменте (как в GMaps) - не тот выбор, который я ожидал от MapBox.Конечно, я могу создать массив пар "идентификатор автомобиля = идентификатор символа", но

Как сохранить свой собственный UID в символе?

ОБНОВЛЕНИЕ: код.Обратите внимание на комментарий рядом с getTag ()

void moveExistingCarOrAddNew(int carId, LatLng newLocation){ 
  for (int i = 0; i < carManager.getAnnotations().size(); i++) { 
    if (carManager.getAnnotations().get(i).getTag()==carId){ //but no getTag() here, I should fit data into text fields
       car.setLatLng(newLocation); //move! 
    } else { 
       ...//create new marker as shown above } 
    }
  }
}
...