Требуется 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()
}