Как убрать оверлей между двумя аннотациями в mapView iOS - PullRequest
0 голосов
/ 12 марта 2019

Вот пример изображения:

enter image description here

Теперь я хочу удалить наложение между 5 и 6 аннотациями. Вот фрагмент кода, который я пробовал до сих пор:

Функция для создания полилинии

func createPolyline() {
    if (arrTempFootStepsLocation.count>0){ //This array contains all the coordinates from starting annonation 1 to 6 
       let points:[CLLocationCoordinate2D] = arrTempFootStepsLocation

       let geodesic = MKGeodesicPolyline(coordinates: points, count: points.count)
       mapService.addOverlay(geodesic)
     }
}

Функция создания аннотаций

func addAnnotations() {
    if let arrProof = arrTempProof{ //This array contains 6 coordinates which are taken from arrTempFootStepsLocation only to create annotation
       for (index , modelPhotoProof) in arrProof.enumerated() {
            if (modelPhotoProof.locationPoint?.latitude != 0.0 && modelPhotoProof.locationPoint?.longitude != 0.0){

               let CLLCoordType = CLLocationCoordinate2D(latitude: modelPhotoProof.locationPoint!.latitude, longitude: modelPhotoProof.locationPoint!.longitude)
               let anno = MyMKPointAnnotation()
               anno.tag = index
               anno.coordinate = CLLCoordType
               mapService.addAnnotation(anno)      
            }
        }
    }
}


func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

        if view.annotation is MyMKPointAnnotation {
            if arrRemovalAnnotationPoint.count<2{ //This array contains selected annotation coordinates
                arrRemovalAnnotationPoint.append((view.annotation?.coordinate)!)
                print("Annotation point inserted.")
            }
        }
    }

Удалить наложение между двумя аннотациями

@IBAction func btnDeletePolylinesPressed(_ sender:UIButton){
        if arrRemovalAnnotationPoint.count == 2 {

            //Find the index of those two annotations from arrTempFootStepsLocation
            let firstAnnoIndex = arrTempFootStepsLocation.index(where: {$0.latitude == arrRemovalAnnotationPoint.first?.latitude && $0.longitude == arrRemovalAnnotationPoint.first?.longitude})

            let lastAnnoIndex = arrTempFootStepsLocation.index(where: {$0.latitude == arrRemovalAnnotationPoint.last?.latitude && $0.longitude == arrRemovalAnnotationPoint.last?.longitude})

            //prepare array to remove coordinates between those two annotations
            if let first = firstAnnoIndex, let last = lastAnnoIndex{

                var arrToRemoved = [CLLocationCoordinate2D]()
                if first > last {
                    arrToRemoved = Array(arrTempFootStepsLocation[last...first])
                    for i in 0..<arrToRemoved.count{

                        let itemToBeRemoved = arrToRemoved[i]

                        for j in 0..<arrTempFootStepsLocation.count - 1 {

                            let itemOriginal = arrTempFootStepsLocation[j]

                            if (itemToBeRemoved.latitude == itemOriginal.latitude && itemToBeRemoved.longitude == itemOriginal.longitude){
                                arrTempFootStepsLocation.remove(at: j)
                            }
                        }
                    }

                    mapService.removeOverlays(mapService.overlays)
                    self.perform(#selector(self.createPolyline()), with: nil, afterDelay: 0.8)

                }
                else {
                    arrToRemoved = Array(arrTempFootStepsLocation[first...last])
                    for i in 0..<arrToRemoved.count{

                        let itemToBeRemoved = arrToRemoved[i]

                        for j in 0..<arrTempFootStepsLocation.count - 1 {

                            let itemOriginal = arrTempFootStepsLocation[j]

                            if (itemToBeRemoved.latitude == itemOriginal.latitude && itemToBeRemoved.longitude == itemOriginal.longitude){
                                arrTempFootStepsLocation.remove(at: j)
                            }
                        }
                    }

                    mapService.removeOverlays(mapService.overlays)
                    self.perform(#selector(self.createPolyline()), with: nil, afterDelay: 0.8)
                }
            }
            arrRemovalAnnotationPoint.removeAll()
        }
}

Теперь проблема в том, что когда я нажимаю кнопку удаления, она не очищает все координаты между этими аннотациями. Теперь, когда я перерисовываю полилинию, она все еще соединяется между этими аннотациями.

Что не так в моем коде? Есть ли другой способ сделать это? Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 марта 2019

удалить определенный индекс в массиве (arrRemovalAnnotationPoint)

...