Требуется MKPolyline, но код продолжает возвращать MKShape

Я хотел бы получить MKPolyline, но мой код продолжает возвращать MKShape. Я пытаюсь использовать библиотеку GEOSwift, как описано здесь: https://github.com/GEOSwift/GEOSwift

Мой код:

let linestring = Geometry.create("LINESTRING(51.063164 -0.728986, 51.072347 -0.723721, 51.116898 -0.731893)")!
let shapeLine = linestring.mapShape()
self.mapView.add(shapeLine)

Я получаю сообщение об ошибке: не могу вызвать "добавить" со списком аргументов типа "(MKShape)"

(пусть shapeLine = linestring.mapshape() должен преобразовать его в MKPolyline)

Однако, если я бегу:

 let linestring = Geometry.create("LINESTRING(51.063164 -0.728986, 51.072347 -0.723721, 51.116898 -0.731893)")!
 let shapeLine = linestring.mapShape()
 dump(shapeLine)

я получаю это:

- <MKPolyline: 0x60000069e550> #0
  - super: MKMultiPoint
    - super: MKShape
      - super: NSObject

Это говорит о том, что там есть Полилиния?

Мой оверлейный рендер:

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let renderer = MKPolylineRenderer(overlay: overlay)
    renderer.strokeColor = UIColor.blue
    renderer.lineWidth = 5.0

    return renderer
}

Кроме того, у меня уже есть другие полилинии, работающие над этим приложением. Я установил MKMapViewDelegate, а также установил делегат для себя.

/// Чтобы попытаться избежать проблемы xy - я пытаюсь выполнить поиск по маршруту, поэтому я использую GEOSwift для создания буфера вокруг полилинии, а затем использую это для поиска в базе данных с помощью гео-запроса этих точек, ниже приведена конкретная проблема, как описано в заголовке: ///

Я уверен, что ошибка проста, но я смотрел на один и тот же код так долго, что просто не вижу его.

Любая помощь высоко ценится

1 ответ

Решение

Метод mapShape(), как определено на [GEOSwiftMapKit][1] протокол, возвращает MKShapeэто абстрактный базовый класс для всех объектов наложения формы MapKit.

Реализация этого метода будет возвращать соответствующий подкласс, в зависимости от базового типа геометрии, хотя, как я указывал выше, сигнатура метода указывает, что он возвращает MKShape это не соответствует MKOverlay как и ожидалось MapKit.MapView"s add метод.

Все, что вам нужно сделать, это подавить shapeLine к MKPolyline

guard let shapeLine = linestring.mapShape() as? MKPolyline else {
    preconditionFailure()
}
Другие вопросы по тегам