Построение координат с помощью MKMapView с использованием полилинии (Swift)

Я пытаюсь использовать MKMapView для нанесения заранее определенных координат на карту. Следующий код запускается кнопкой.

Массив 'coordinatesArr' является двумерным и содержит широту, долготу и отметку времени. Каждый элемент хранится в виде строки по другим причинам, поэтому при загрузке координаты преобразуются в двойные.

Пример:

 [["37.33027293", "-122.02788965", "2018-05-30 15:18:21.459808+0100"], ["37.33026014", "-122.02768476", "2018-05-30 15:18:22.459808+0100"]]

Код хранится в следующем классе:

 class PostCell: UITableViewCell, MKMapViewDelegate

Код

 (MAP IS THE FOLLOWING OUTLET: @IBOutlet weak var activityFeedMap: MKMapView!)

 let span = MKCoordinateSpanMake(0.001, 0.001)
 // ALTHOUGH THIS WILL NOT BE MY ULTIMATE METHOD, THE MAP IS CURRENTLY CENTRED ON THE FIRST LOCATION
 let myLocation = CLLocationCoordinate2DMake(Double(coordinatesArr[0][1]) ?? 0.0, Double(coordinatesArr[0][0])!)
 let region = MKCoordinateRegionMake(myLocation, span)
 activityFeedMap.setRegion(region, animated:true)
 activityFeedMap.delegate=self
 activityFeedMap.mapType = MKMapType.hybrid

 // CODE IN QUESTION
 // ---
 // PERHAPS I SHOULD LOOP THROUGH THE ARRAY, BUT I BELIEVE THIS
 // FULFILS THE SAME PURPOSE
 var counter=0
 while counter < (coordinatesArr.count - 1){

    // LASTLOCFORMATTED, AND NEXTLOCFORMATTED ARE EACH A SET OF
    // CO-ORDINATES BETWEEN WHICH A POLYLINE SHOULD BE PLOTTED
    let lastLocFormatted = CLLocationCoordinate2DMake(Double(coordinatesArr[counter][1])!, Double(coordinatesArr[counter][0])!)

    let nextLocFormatted = CLLocationCoordinate2DMake(Double(coordinatesArr[counter+1][1])!, Double(coordinatesArr[counter+1][0])!)

    // AN ARRAY HOLDING THE CO-ORDINATES OF THE POINTS TO PLOT
    // A POLYLINE BETWEEN
    var a=[lastLocFormatted, nextLocFormatted]

    // LINE TO PLOT
    let polyline = MKPolyline(coordinates: &a, count: counter)

    activityFeedMap.add(polyline)

    COUNTER += 1
 }


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    // CHECK TO SEE WHETHER OVERLAY IS OF TYPE MKPOLYLINE
    // AND ONLY LAY TRACE IF TIMER RUNNING
    // note: different renderer required for differnt types
    if overlay is MKPolyline{
        // CREATE MKPOLYLINERENDERER AND PASS OUR OVERLAY OVER
        let polylineRenderer = MKPolylineRenderer(overlay: overlay)
        // SET LINE COLOR TO BLUE
        polylineRenderer.strokeColor = UIColor.orange
        // SET LINE WIDTH TO 4
        polylineRenderer.lineWidth = 4
        return polylineRenderer
    }
    // IF OVERLAY NOT OF TYPE MKPOLYLINE
    return MKPolylineRenderer()
}

Хотя этот код частично работает, я каким-то образом получаю дополнительные данные.

 37.33027293, -122.02788965
 37.33026634, -122.0278357
 37.33026525, -122.02778504
 37.33026222, -122.02773507
 37.33026014, -122.02768476

Вышеупомянутое должно построить:

введите здесь описание изображения

Однако этот код создает следующее

введите здесь описание изображения

Линия, обведенная синим цветом, кажется, продолжается бесконечно.

Любая помощь, которую вы можете предоставить, будет очень признательна, так как я новичок в Swift и исчерпал все действия по исправлению, которые я могу придумать.

Спасибо!


person George    schedule 30.05.2018    source источник


Ответы (1)


Во-первых, я бы рекомендовал использовать https://developer.apple.com/documentation/mapkit/mkpolyline/1452773-polylinewithpoints polylineWithPoints вместо добавления полилинии для каждой из них.

Похоже, вы промахнулись, и ваш последний сегмент приближается к Нулевому острову.

person Joshua Smith    schedule 30.05.2018
comment
Спасибо за помощь. Хотя мне не удалось исправить исходный код, благодаря вашим предложениям я смог заставить его работать. - person George; 30.05.2018