Как сохранить маршрут, нарисованный в MKMapView, как данные Core? - PullRequest
0 голосов
/ 24 февраля 2020

enter image description here

Я нарисовал маршрут на MKMapView. Я сохранил данные о местоположении, чтобы нарисовать маршрут. Данные о местоположении хранятся в десятках мегабайт в день. Поэтому я пытаюсь уменьшить количество хранимых данных, и все, что мне нужно, это карта с маршрутом прошлого.

Что такое простые данные, кроме сотен сохраненных данных о местоположении, для отображения маршрута, как показано на скриншоте?

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете использовать MKMapSnapshotter. К сожалению, вам придется stroke указать ваш путь вручную, используя point(for:) для преобразования CLLocationCoordinate2D в CGPoint в MKMapSnapshotter.Snapshot:

let options = MKMapSnapshotter.Options()
options.region = mapView.region
options.size = mapView.bounds.size

MKMapSnapshotter(options: options).start { snapshot, _ in
    guard let snapshot = snapshot else { return }

    let image = UIGraphicsImageRenderer(size: options.size).image { _ in
        snapshot.image.draw(at: .zero)

        let count = route.polyline.pointCount
        let points = route.polyline.points()
        guard count > 1 else { return }

        let path = UIBezierPath()
        path.move(to: snapshot.point(for: points[0].coordinate))
        for i in 1 ..< count {
            path.addLine(to: snapshot.point(for: points[i].coordinate))
        }

        path.lineWidth = 4
        path.lineCapStyle = .round
        path.lineJoinStyle = .round
        UIColor.blue.withAlphaComponent(0.75).setStroke()

        path.stroke()
    }

    guard let data = image.pngData() else { return }

    // you can now write this `data` to persistent storage
}

То выходы:

enter image description here

Теперь вышеприведенное, очевидно, просто поглаживает route.polyline, связанный с MKDirections результатом в одном UIBezierPath, и вы будете перебирать свою модель, по-видимому, поглаживая каждую из этих разноцветных частей в отдельном UIBezierPath, но, надеюсь, это иллюстрирует идею.

...