需要 MKPolyline 但代码不断返回 MKShape
Require MKPolyline but code keeps returning 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)”的参数列表调用 'add'
(让 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 并将委托设置为 self。
///尝试避免 xy 问题 - 我试图沿着一条路线搜索,所以我使用 GEOSwift 在多段线周围创建缓冲区,然后使用它来搜索具有这些点的地理查询的数据库,下面是具体问题如题中所述:///
我确定这个错误很简单,但我看了同一个代码太久了,我就是看不出来。
非常感谢任何帮助
方法 mapShape()
,如 [GEOSwiftMapKit][1]
协议中所定义,return 是一个 MKShape
,它是所有基于形状的抽象基础 class MapKit 叠加对象。
该方法的实施将 return 适当的子 class,具体取决于基础几何类型,尽管正如我在上面指出的那样,该方法的签名表明它 return s MKShape
不符合 MapKit.MapView
的 add
方法预期的 MKOverlay
。
您需要做的就是将 shapeLine
向下转换为 MKPolyline
guard let shapeLine = linestring.mapShape() as? MKPolyline else {
preconditionFailure()
}
我想检索 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)”的参数列表调用 'add'
(让 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 并将委托设置为 self。
///尝试避免 xy 问题 - 我试图沿着一条路线搜索,所以我使用 GEOSwift 在多段线周围创建缓冲区,然后使用它来搜索具有这些点的地理查询的数据库,下面是具体问题如题中所述:///
我确定这个错误很简单,但我看了同一个代码太久了,我就是看不出来。
非常感谢任何帮助
方法 mapShape()
,如 [GEOSwiftMapKit][1]
协议中所定义,return 是一个 MKShape
,它是所有基于形状的抽象基础 class MapKit 叠加对象。
该方法的实施将 return 适当的子 class,具体取决于基础几何类型,尽管正如我在上面指出的那样,该方法的签名表明它 return s MKShape
不符合 MapKit.MapView
的 add
方法预期的 MKOverlay
。
您需要做的就是将 shapeLine
向下转换为 MKPolyline
guard let shapeLine = linestring.mapShape() as? MKPolyline else {
preconditionFailure()
}