Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clustering #211

Open
iniko83 opened this issue Aug 6, 2019 · 1 comment
Open

Clustering #211

iniko83 opened this issue Aug 6, 2019 · 1 comment

Comments

@iniko83
Copy link

iniko83 commented Aug 6, 2019

Подскажите пожалуйста, как решить такую проблему:

Есть YMK, есть набор placemarks и switcher, который переключает visibility данных place marks. Оно все плавно анимируется и работает как надо.

Решили добавить clustering и сходу столкнулись с множеством проблем:

  1. Не распознает visibility, кластеризуя все placemarks вне зависимости от.
  2. Ок, убрали visibility и пересоздаем placemarks каждый раз.
    Но при этом, мы естественно удаляем/приближаем камеру, чтобы все items вошли в focusRect. При этом clustering показывает наши placemarks + clusters и по мере удаления их "смешивает".
  3. Ок, попробовали установить opacity в 0 и по завершению показа показывать то что есть, потому что сам процесс выглядит не очень. Вызываем collection.parent.traverse - он не находит кластеры...

Как решить эту проблему?

P.S. Ну а про интерфейс просто промолчу. Хуже я даже не припомню.

P.P.S. Видео:
https://www.dropbox.com/s/jym4vlcvfouhtiq/clustering_example.mov?dl=0

@iniko83
Copy link
Author

iniko83 commented Aug 6, 2019

Решил проблему обновляя items в mapUpdater только после анимации map в boundingBox, благо Rx с легкостью это позволяет делать.
Т.е. следующий алгоритм.

  1. Вначале анимации zoomToBoundingBox - collection.clear()
  2. По завершению анимации выставляем items.

`
checkoutItems
.subscribe(onNext: { [unowned self] items in self.updateVisibleItems(items) })
.disposed(by: disposeBag)

private func updateVisibleItems(_ items: [CheckoutItem]) {
let delayedItemsDisposeBag = DisposeBag()
self.delayedItemsDisposeBag = delayedItemsDisposeBag

    mapUpdater.clearPlacemarks()

    let timeInterval = viewModel.inputs.mapTransitionDuration.value
    Observable.just(items)
        .delay(timeInterval, scheduler: MainScheduler.instance)
        .bind(to: mapUpdater.inputs.visibleItems)
        .disposed(by: delayedItemsDisposeBag)
}

`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant