Как удалить кластеризованные метки в ЯндексКартах?

Мне нужно показать кластеризованные метки в моем приложении. Когда я добавляю метки черезddPlacemarkWithPoint:оно работает. Но когда мне нужно удалить некоторые из них, у меня возникает проблема.YMKClusterizedPlacemarkCollection имеет только cleanметод, удаляющий все отметки. Если я уберу все отметки, а затем добавлю их часть, я увижу мигающие булавки на своей карте. Затем я пытаюсь снять отметку сmapView.map.mapObjects через removeWithMapObject:. И это вызывает исключение и сбой.*** Assertion failure in -[YMKMapObjectCollection removeWithMapObject:], ../../../../../../../../idl/ios/impl/YandexMapKit/YMKMapObjectCollection_Binding.mm:398

Вот мое "пустое" приложение, которое воспроизводит проблему:

    @IBOutlet var mapView: YMKMapView!

    var mapWindow: YMKMapWindow! {
        return mapView.mapWindow
    }
    var map: YMKMap! {
        return mapWindow.map
    }
    var placemarks = [YMKPlacemarkMapObject]()

    var placemarksCollection: YMKClusterizedPlacemarkCollection!

    override func viewDidLoad() {
        super.viewDidLoad()

        setupMap()
        addClusters()
//        addPointsOnMap()
        addPointsToCollection()
        DispatchQueue.main.asyncAfter(deadline: .now() + 3.5) {
            self.removePoints()
        }
    }

    func setupMap() {
        let cameraPosition = YMKCameraPosition(target: YMKPoint.moscow,
                                               zoom: 13,
                                               azimuth: 0,
                                               tilt: 0)
        map.isDebugInfoEnabled = true
        map.move(
            with: cameraPosition,
            animationType: YMKAnimation(type: .smooth, duration: 0.3),
            cameraCallback: nil)
    }

    func addClusters() {
        placemarksCollection = map.mapObjects.addClusterizedPlacemarkCollection(with: self)
    }

    func addPointsOnMap() {
        for _ in 0..<5 {
            let placemark = map.mapObjects.addPlacemark(with: YMKPoint(latitude: YMKPoint.moscow.latitude + Double(arc4random() % 10)/1000, longitude: YMKPoint.moscow.longitude + Double(arc4random() % 10)/1000))
            placemarks.append(placemark)
        }
    }

    func addPointsToCollection() {
        for _ in 0..<5 {
            let placemark = placemarksCollection.addPlacemark(with: YMKPoint(latitude: YMKPoint.moscow.latitude + Double(arc4random() % 10)/1000, longitude: YMKPoint.moscow.longitude + Double(arc4random() % 10)/1000))
            placemarks.append(placemark)
        }
        placemarksCollection.clusterPlacemarks(withClusterRadius: 60, minZoom: 10)
    }

    func removePoints() {
        if let placemark = placemarks.last {
            map.mapObjects.remove(with: placemark)
        }
    }

1 ответ

Возможность удаления маркеров из кластеров добавлена ​​с версии 4.0.0.
Также команда Яндекса изменила название пакета с com.yandex.android:mapkit к com.yandex.android:maps.mobile.

Другие вопросы по тегам