Я работаю с картой mapbox для ios.В него я добавляю аннотации.Когда вы начинаете уменьшать масштаб, аннотации становятся все ближе и ближе к той степени, в которой они начинают перекрываться.Я пытался написать логику, чтобы исправить это, но это замедляет работу приложения.
Мне было интересно, есть ли какие-нибудь встроенные методы mapbox, которые могут позаботиться об этой [группировке] из меня.
Так ли это?Можете поделиться ими?
Ниже приведен код, который я пробовал, если это поможет:
func mapViewRegionIsChanging(_ mapView: MGLMapView) {
print(mapView.zoomLevel, " Cenetr -<<<<")
print(mapView.visibleAnnotations, " These are the visible annotations")
grouping(mapView: mapView)
}
func grouping(mapView: MGLMapView) {
if let annotations = mapView.visibleAnnotations {
var lastVal = 0.0
var arrayAnnotationsToRemove = [CustomPointAnnotation]()
var arrayPolylinesToRemove = [MGLPolyline]()
for val in arrayOfLineInformationObjects {
if mapView.zoomLevel < 10 && mapView.zoomLevel > 7 {
let dif = lastVal-val.arrayOfPointAnnotations![0].coordinate.longitude
print(dif, "The dif is to teh left")
//long is being compared
if dif <= 0.01 {//dif >= 0.05 &&
print("Delete")
arrayAnnotationsToRemove.append(val.arrayOfPointAnnotations![0])
arrayAnnotationsToRemove.append(val.arrayOfPointAnnotations![1])
arrayPolylinesToRemove.append(val.polyline!)
}
} else if mapView.zoomLevel < 7 && mapView.zoomLevel > 5 {
let dif = lastVal-val.arrayOfPointAnnotations![0].coordinate.longitude
print(dif, "The dif is to teh left")
//long is being compared
if dif <= 0.01 {
print("Delete 2")
arrayAnnotationsToRemove.append(val.arrayOfPointAnnotations![0])
arrayAnnotationsToRemove.append(val.arrayOfPointAnnotations![1])
arrayPolylinesToRemove.append(val.polyline!)
}
}
lastVal = val.arrayOfPointAnnotations![0].coordinate.longitude
}
for (valueA, valueP) in zip(arrayAnnotationsToRemove, arrayPolylinesToRemove) {
mapView.removeAnnotation(valueA)
mapView.removeAnnotation(valueA)
mapView.remove(valueP)
}
if arrayAnnotationsToRemove.count > 0 {
let newGroupedAnnotation = MGLPolygon(coordinates: &arrayAnnotationsToRemove[0].coordinate, count: 1)
mapView.addAnnotation(polygonCircleForCoordinate(coordinate: arrayAnnotationsToRemove[0].coordinate, withMeterRadius: 50))
}
//notation(T##annotation: MGLAnnotation##MGLAnnotation)
}
}