Как удалить кластеризованные метки в ЯндексКартах?
Мне нужно показать кластеризованные метки в моем приложении. Когда я добавляю метки через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
.