我正在尝试在两点之间的 Swift 中创建一条路线,但我的 MKDirectionsResponse 似乎出现错误
I am trying to create a route in Swift between two points, but my MKDirectionsResponse seems to get an error
我正在尝试学习如何在两个位置之间生成路线,所以我创建了一个包含假位置和内容的项目,这样一旦我 "get it" 我就可以在我的真实应用程序中实现它。
我正在尝试生成 "location" 和 "next" 之间的路由,但遇到了严重错误。
代码如下:
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var map: MKMapView!
var geocoder:CLGeocoder = CLGeocoder()
var location:CLLocation = CLLocation(latitude: 38, longitude: -77)
var next:CLLocation = CLLocation(latitude: 38.21, longitude: -77.21)
var locMark:MKPlacemark?
var destMark:MKPlacemark?
var manager:CLLocationManager = CLLocationManager()
var source:MKMapItem?
var destination:MKMapItem?
var request:MKDirectionsRequest = MKDirectionsRequest()
var directions:MKDirections = MKDirections()
var directionsResponse:MKDirectionsResponse = MKDirectionsResponse()
var route:MKRoute = MKRoute()
override func viewDidLoad() {
super.viewDidLoad()
manager.requestAlwaysAuthorization()
map.mapType = MKMapType.Satellite
locMark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), addressDictionary: nil)
destMark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(next.coordinate.latitude, next.coordinate.longitude), addressDictionary: nil)
source = MKMapItem(placemark: locMark)
destination = MKMapItem(placemark: destMark)
request.setSource(source)
request.setDestination(destination)
request.transportType = MKDirectionsTransportType.Automobile
request.requestsAlternateRoutes = true
directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler { (response:MKDirectionsResponse?, error:NSError?) -> Void in
if error == nil {
self.directionsResponse = response!
self.route = self.directionsResponse.routes[0] as! MKRoute
map.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
} else {
println(error)
}
}
}
路线未显示。
我认为这是因为纬度范围从-90 到 90,而 120 超出了范围。因此,您指定的数据无效。
第一个数字,纬度,范围从-90到+90。第二个数字的范围是 -180 到 +180。
也许可以解决您的问题
How to use MKPolylineView in Swift
首先,你必须创建一个MKPolylineRenderer
,因为MKPolylineView
自iOS 7以来已被弃用。MKPolylineView
是Swift.
不支持
其次,您必须在 rendererForOverlay 委托方法
中创建 return 一个 MKPolylineRenderer
然后执行rendererForOverlay
方法:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.orangeColor()
polylineRenderer.lineWidth = 5
return polylineRenderer
}
return nil
}
确保地图视图的 delegate
已设置,否则将不会调用委托方法并且不会出现叠加层,请记住连接 delegate
插座或在您的代码中进行设置。
self.map.delegate = self
我正在尝试学习如何在两个位置之间生成路线,所以我创建了一个包含假位置和内容的项目,这样一旦我 "get it" 我就可以在我的真实应用程序中实现它。
我正在尝试生成 "location" 和 "next" 之间的路由,但遇到了严重错误。
代码如下:
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var map: MKMapView!
var geocoder:CLGeocoder = CLGeocoder()
var location:CLLocation = CLLocation(latitude: 38, longitude: -77)
var next:CLLocation = CLLocation(latitude: 38.21, longitude: -77.21)
var locMark:MKPlacemark?
var destMark:MKPlacemark?
var manager:CLLocationManager = CLLocationManager()
var source:MKMapItem?
var destination:MKMapItem?
var request:MKDirectionsRequest = MKDirectionsRequest()
var directions:MKDirections = MKDirections()
var directionsResponse:MKDirectionsResponse = MKDirectionsResponse()
var route:MKRoute = MKRoute()
override func viewDidLoad() {
super.viewDidLoad()
manager.requestAlwaysAuthorization()
map.mapType = MKMapType.Satellite
locMark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), addressDictionary: nil)
destMark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(next.coordinate.latitude, next.coordinate.longitude), addressDictionary: nil)
source = MKMapItem(placemark: locMark)
destination = MKMapItem(placemark: destMark)
request.setSource(source)
request.setDestination(destination)
request.transportType = MKDirectionsTransportType.Automobile
request.requestsAlternateRoutes = true
directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler { (response:MKDirectionsResponse?, error:NSError?) -> Void in
if error == nil {
self.directionsResponse = response!
self.route = self.directionsResponse.routes[0] as! MKRoute
map.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
} else {
println(error)
}
}
}
路线未显示。
我认为这是因为纬度范围从-90 到 90,而 120 超出了范围。因此,您指定的数据无效。
第一个数字,纬度,范围从-90到+90。第二个数字的范围是 -180 到 +180。
也许可以解决您的问题
How to use MKPolylineView in Swift
首先,你必须创建一个MKPolylineRenderer
,因为MKPolylineView
自iOS 7以来已被弃用。MKPolylineView
是Swift.
其次,您必须在 rendererForOverlay 委托方法
中创建 return 一个MKPolylineRenderer
然后执行rendererForOverlay
方法:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.orangeColor()
polylineRenderer.lineWidth = 5
return polylineRenderer
}
return nil
}
确保地图视图的 delegate
已设置,否则将不会调用委托方法并且不会出现叠加层,请记住连接 delegate
插座或在您的代码中进行设置。
self.map.delegate = self