Search code examples
iosswiftmapkitcllocation

I am trying to create a route in Swift between two points, but my MKDirectionsResponse seems to get an error


I am trying to learn how to generate a route between two locations, so I created a project with fake locations and stuff so that once I "get it" I can implement it in my real app.

I am trying to generate a route between "location" and "next", but am getting a bad error.

Here is the code:

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)
        }
    } 
}

The route is not showing up.


Solution

  • I'm thinking it's because latitudes range from -90 to 90, and 120 is out of range. Thus you're specifying invalid data.

    The first number, latitude, ranges from -90 to +90. The second number ranges from -180 to +180.