1

I am trying to get the maneuver data for the given route from Google Maps' API. Running the code gives me nil values.

Here is the code I am running to get the maneuver data:

func getRouteSteps(source: CLLocationCoordinate2D,destination: CLLocationCoordinate2D) {
        let session = URLSession.shared

        let url = URL(string: "https://maps.googleapis.com/maps/api/directions/json?origin=\(source.latitude),\(source.longitude)&destination=\(destination.latitude),\(destination.longitude)&sensor=false&mode=driving&key=\(APIKey)")!

        let task = session.dataTask(with: url, completionHandler: {
            (data, response, error) in

            guard error == nil else {
                print(error!.localizedDescription)
                return
            }

            guard let jsonResult = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] else {
                print("error in JSONSerialization")
                return
            }

            guard let routes = jsonResult["routes"] as? [Any] else { return }
            guard let route = routes[0] as? [String: Any] else { return }
            guard let legs = route["legs"] as? [Any] else { return }
            guard let leg = legs[0] as? [String: Any] else { return }
            guard let steps = leg["steps"] as? [Any] else { return }
            guard let duration = leg["duration"] as? [String: Any] else { return }
            guard let distance = leg["distance"] as? [String: Any] else { return }

            RouteData.append(RouteInfo(Time: String(describing: duration["text"]! as Any), Distance: String(describing: distance["text"]! as Any)))

            for item in steps {
                guard let step = item as? [String: Any] else { return }
                guard let stepTurns = step["html_instructions"] as? String else { return }
                guard let stepDistance = step["distance"] as? [String: Any] else { return }
                guard let stepTime = step["duration"] as? [String: Any] else { return }
                guard let polyline = step["polyline"] as? [String: Any] else { return }
                guard let polyLineString = polyline["points"] as? String else { return }
                guard let maneuver = step["maneuver"] as? Any else { return }
                print(maneuver)

Here are the results:

nil
nil
Optional(turn-right)
Optional(turn-left)
Optional(ramp-left)
Optional(ramp-right)
Optional(straight)
Optional(turn-slight-left)
Optional(turn-slight-left)
Optional(turn-left)
WKD
  • 11
  • 4

0 Answers0