Ios 路线未显示在MKMapView中?
我有这些方法在两个Ios 路线未显示在MKMapView中?,ios,swift,routes,mkmapview,Ios,Swift,Routes,Mkmapview,我有这些方法在两个CLLocation之间为MKMapView添加路由。我有有效的收货距离位置和收货距离位置 func addRoutesOverLayForMapView(){ var source:MKMapItem? var destination:MKMapItem? println("\(pickUpDistanceLocation)") println("\(dropOffDistanceLocation)")
CLLocation
之间为MKMapView添加路由。我有有效的收货距离位置和收货距离位置
func addRoutesOverLayForMapView(){
var source:MKMapItem?
var destination:MKMapItem?
println("\(pickUpDistanceLocation)")
println("\(dropOffDistanceLocation)")
//i also tested with these locations
//let sourcelocation = CLLocation(latitude: 40.7141667, longitude: -74.0063889)
//let destinationLocation = CLLocation(latitude: 38.89, longitude: 77.03)
CLGeocoder().reverseGeocodeLocation(pickUpDistanceLocation, completionHandler: {(placemarks,error)-> Void in
if (error != nil) {
println("Reverse geocoder failed with error" + error.localizedDescription)
return
}
if placemarks.count > 0 {
if let placemark: MKPlacemark = placemarks![0] as? MKPlacemark {
source = MKMapItem(placemark: placemark)
println("\(source)")
}
} else {
println("Problem with the data received from geocoder")
}
})
CLGeocoder().reverseGeocodeLocation(dropOffDistanceLocation, completionHandler: {(placemarks,error)-> Void in
if (error != nil) {
println("Reverse geocoder failed with error" + error.localizedDescription)
return
}
if placemarks.count > 0 {
if let placemark: MKPlacemark = placemarks![0] as? MKPlacemark {
destination = MKMapItem(placemark: placemark)
println("\(destination)")
}
} else {
println("Problem with the data received from geocoder")
}
})
let request:MKDirectionsRequest = MKDirectionsRequest()
request.setSource(source)
request.setDestination(destination)
request.transportType = MKDirectionsTransportType.Automobile
request.requestsAlternateRoutes = false
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.showRoute(response!)
}
})
}
这是在地图中添加路线覆盖的方法
func showRoute(response:MKDirectionsResponse){
for route in response.routes as! [MKRoute]{
mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
}
}
我得到这个错误,因为响应返回错误:400
打印错误时显示为
可选(“操作无法完成。(nsurErrorDomain
错误-1011。))
实际上,源变量和目标变量都为零。。所以我从服务器得到了错误的响应。如果需要,请尝试下面的代码
func addRoutesOverLayForMapView(){
var source:MKMapItem?
var destination:MKMapItem?
var sourcePlacemark = MKPlacemark(coordinate: pickUpDistanceLocation!.coordinate, addressDictionary: nil)
source = MKMapItem(placemark: sourcePlacemark)
var desitnationPlacemark = MKPlacemark(coordinate: dropOffDistanceLocation!.coordinate, addressDictionary: nil)
destination = MKMapItem(placemark: desitnationPlacemark)
let request:MKDirectionsRequest = MKDirectionsRequest()
request.setSource(source)
request.setDestination(destination)
request.transportType = MKDirectionsTransportType.Walking
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.showRoute(response!)
}
else{
println("trace the error \(error?.localizedDescription)")
}
})
}
func showRoute(response:MKDirectionsResponse){
for route in response.routes as! [MKRoute]{
mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
var routeSeconds = route.expectedTravelTime
let routeDistance = route.distance
println("distance between two points is \(routeSeconds) and \(routeDistance)")
}
}
您应该实现这个委托方法,不要忘记设置mapview委托
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
polylineRenderer.lineWidth = 2.5
return polylineRenderer
}
return nil
}
实际上,源变量和目标变量都为零。。所以我从服务器得到了错误的响应。如果需要,请尝试下面的代码
func addRoutesOverLayForMapView(){
var source:MKMapItem?
var destination:MKMapItem?
var sourcePlacemark = MKPlacemark(coordinate: pickUpDistanceLocation!.coordinate, addressDictionary: nil)
source = MKMapItem(placemark: sourcePlacemark)
var desitnationPlacemark = MKPlacemark(coordinate: dropOffDistanceLocation!.coordinate, addressDictionary: nil)
destination = MKMapItem(placemark: desitnationPlacemark)
let request:MKDirectionsRequest = MKDirectionsRequest()
request.setSource(source)
request.setDestination(destination)
request.transportType = MKDirectionsTransportType.Walking
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.showRoute(response!)
}
else{
println("trace the error \(error?.localizedDescription)")
}
})
}
func showRoute(response:MKDirectionsResponse){
for route in response.routes as! [MKRoute]{
mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
var routeSeconds = route.expectedTravelTime
let routeDistance = route.distance
println("distance between two points is \(routeSeconds) and \(routeDistance)")
}
}
您应该实现这个委托方法,不要忘记设置mapview委托
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
polylineRenderer.lineWidth = 2.5
return polylineRenderer
}
return nil
}
对于Swift 2.1:
func addRoutesOverLayForMapView(){
var source:MKMapItem?
var destination:MKMapItem?
let Scoordinate = CLLocationCoordinate2D(latitude: passLat, longitude: passLong)
var sourcePlacemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: passLat, longitude: passLong), addressDictionary: nil)
source = MKMapItem(placemark: sourcePlacemark)
let DCoordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
var desitnationPlacemark = MKPlacemark(coordinate: DCoordinate, addressDictionary: nil)
destination = MKMapItem(placemark: desitnationPlacemark)
let request:MKDirectionsRequest = MKDirectionsRequest()
request.source = source
request.destination = destination
request.transportType = MKDirectionsTransportType.Walking
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.showRoute(response!)
}
else{
print("some error")
}
})
}
func showRoute(response:MKDirectionsResponse){
for route in response.routes {
mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
let routeSeconds = route.expectedTravelTime
let routeDistance = route.distance
print("distance between two points is \(routeSeconds) and \(routeDistance)")
}
}
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
let polylineRenderer = MKPolylineRenderer(overlay: overlay)
if overlay is MKPolyline {
polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
polylineRenderer.lineWidth = 2.5
return polylineRenderer
}
return polylineRenderer
}
对于Swift 2.1:
func addRoutesOverLayForMapView(){
var source:MKMapItem?
var destination:MKMapItem?
let Scoordinate = CLLocationCoordinate2D(latitude: passLat, longitude: passLong)
var sourcePlacemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: passLat, longitude: passLong), addressDictionary: nil)
source = MKMapItem(placemark: sourcePlacemark)
let DCoordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
var desitnationPlacemark = MKPlacemark(coordinate: DCoordinate, addressDictionary: nil)
destination = MKMapItem(placemark: desitnationPlacemark)
let request:MKDirectionsRequest = MKDirectionsRequest()
request.source = source
request.destination = destination
request.transportType = MKDirectionsTransportType.Walking
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.showRoute(response!)
}
else{
print("some error")
}
})
}
func showRoute(response:MKDirectionsResponse){
for route in response.routes {
mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
let routeSeconds = route.expectedTravelTime
let routeDistance = route.distance
print("distance between two points is \(routeSeconds) and \(routeDistance)")
}
}
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
let polylineRenderer = MKPolylineRenderer(overlay: overlay)
if overlay is MKPolyline {
polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
polylineRenderer.lineWidth = 2.5
return polylineRenderer
}
return polylineRenderer
}
据OSStatus称,这似乎是一个服务器错误:那么我该怎么办?我尝试过使用不同的lat和LONGIT。如果错误是服务器端的,在苹果解决之前,你无能为力。据OSStatus称,这似乎是一个服务器错误:那么我该怎么办?我试过使用不同的lat和longIf错误是服务器端的,在苹果解决之前,你没什么办法。