使用 MapView 快速从一个位置到另一个位置的路线
Posted
技术标签:
【中文标题】使用 MapView 快速从一个位置到另一个位置的路线【英文标题】:Directions from one location to another in swift using MapView 【发布时间】:2020-06-08 03:23:16 【问题描述】:MapView Image with 2 Textfields如何在 swift 中使用 MapView 绘制从一个位置到另一个在 UITextfield 中输入的方向/路线? 用户应在源文本字段中输入一个位置,在目标文本字段中输入一个位置。通过代码,我们应该能够获取这些位置的坐标,并且应该在按下按钮时创建从源到目的地的方向/路线。 我是 swift 新手,所以我还没有工作的情况。我会很感激一些帮助。 谢谢你
【问题讨论】:
【参考方案1】:基本思想是获取“from”和“to”文本字段的坐标,然后为此计算MKDirections
:
let geocoder = CLGeocoder()
func getDirections()
guard
let from = fromTextField.text,
!from.isEmpty,
let to = toTextField.text,
!to.isEmpty
else
print("need to and from locations")
return
geocoder.geocodeAddressString(from) placemarks, error in
guard let fromPlacemark = placemarks?.first else
print("from", error ?? "Unknown error")
return
self.geocoder.geocodeAddressString(to) placemarks, error in
guard let toPlacemark = placemarks?.first else
print("to", error ?? "Unknown error")
return
self.calculateDirections(from: fromPlacemark, to: toPlacemark)
现在,我使用的是geocodeAddressString
,但如果您想将搜索限制在地图的当前可见部分,您可以使用MKLocalSearch
。
要计算方向并将路线添加到地图:
func calculateDirections(from fromPlacemark: CLPlacemark, to toPlacemark: CLPlacemark)
let request = MKDirections.Request()
request.source = MKMapItem(placemark: MKPlacemark(placemark: fromPlacemark))
request.destination = MKMapItem(placemark: MKPlacemark(placemark: toPlacemark))
MKDirections(request: request).calculate response, error in
guard let route = response?.routes.first else
print("route", error ?? "Unknown error")
return
self.mapView.addOverlay(route.polyline)
self.mapView.setVisibleMapRect(route.polyline.boundingMapRect, animated: true)
这显然假设您已经为地图视图指定了委托并实现了mapView(_:rendererFor:)
:
extension ViewController: MKMapViewDelegate
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.lineWidth = 5
renderer.strokeColor = UIColor.blue.withAlphaComponent(0.5)
return renderer
显然还有更多功能(在 UI 中显示错误消息、处理地理编码请求或路线请求返回多个结果的情况、在所有这些搜索/计算发生时显示 UIActivityIndicatorView
等)但这说明了如何在地图上计算和显示方向的一些基本移动部分。
【讨论】:
以上是关于使用 MapView 快速从一个位置到另一个位置的路线的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 的 MapView 中更新当前位置的蓝点标记
如何使用 phonegap 将文件从一个位置移动/复制到另一个位置