2016-09-22 2 views
0

Я очень новичок и борюсь с SDK Google Maps. Можно ли использовать карты google maps sdk для фактического создания маршрута? Например, если бы я мог сделать кнопку, которая говорила «Generate Route», а затем после нажатия на нее генерирует маршрут, который пользователь мог бы на самом деле перемещаться, как при использовании реального приложения карт Google Maps? Благодарю.Используйте SDK GoogleMaps для генерации маршрутов?

ответ

1

Пример:

func getDiectionFromGoogle(startCoordinate: CLLocationCoordinate2D, toLocation: CLLocationCoordinate2D) { 
    var urlString = "https://maps.googleapis.com/maps/api/directions/json?origin=\(startCoordinate.latitude),\(startCoordinate.longitude)&destination=\(toLocation.latitude),\(toLocation.longitude)&key=\("your key!!")" 
    urlString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)! 
    let session = URLSession.shared 
    let placesTask = session.dataTask(with: URL(string: urlString)!, completionHandler: {data, response, error in 
     if error != nil { 
     } 
     if let jsonResult = (try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers)) as? NSDictionary { 

      // *******UPDATE********** 
      print(jsonResult) // this returns a dictionary 

      if let routes = jsonResult["routes"] as? NSArray { 
       // example to get data from dictionary 
      } 

     }) 
     placesTask.resume() 
    } 

Посмотрите, что вы получите в JsonResult. Вы можете найти все координаты, необходимые для создания путей для вашего направления и многое другое!

Кроме того, вы можете использовать больше параметров в своем запросе json. Взгляните сюда. https://developers.google.com/maps/documentation/directions/intro

// обновление 15 октября

Я думаю, вы столкнулись с проблемой с закодированным путем. Вот как я декодирую путь. Я уверен, что я не делаю простейший путь, но я просто игнорирую его, потому что он просто работает. haha

// you can see a key called polyline in somewhere in the dictionary 
// polylineCoordinates are all the coordinates for your routes 
// path can be used for polyline 
if let polyline = (paths[i] as AnyObject).value(forKey: "polyline") as? NSDictionary { 
    if let points = polyline.value(forKey: "points") as? String { 
     let gmsPath = GMSPath(fromEncodedPath: points) 
     for index in 0 ..< gmsPath!.count() { 
      let coordinate = gmsPath!.coordinate(at: index) 
      self.polylineCoordinates.append(coordinate) 
      self.path.add(coordinate) 
     } 
    } 
} 

Вот документ Google о том, как использовать полилинии. Я не дам вам никакого кода для этого. Я уверен, что вы сможете это решить. Учитесь, поступая правильно? Но если вы что-то застряли, вы можете вернуться ко мне. Я постараюсь помочь :) https://developers.google.com/maps/documentation/ios-sdk/shapes

Я не уверен, что Google обеспечивает навигацию, такую ​​как карты Google, или нет. Я сам создаю навигацию приложения. Я могу попытаться помочь вам в этом, если смогу.

// обновление 20 октября

Вы почти там. Путь [i] происходит отсюда LOL. Действительно уродливый код.

if let jsonResult = (try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers)) as? NSDictionary { 
    if let routes = jsonResult["routes"] as? NSArray { 
     if let legs = routes.value(forKey: "legs") as? NSArray { 
      if let steps = legs.value(forKey: "steps") as? NSArray { 
       if steps.count != 0 { 
        if let firstStep = steps.object(at: 0) as? NSArray { 
         if firstStep.count != 0 { 
          if let paths = firstStep.object(at: 0) as? NSArray { 
           if paths.count > 0 { 
            for i in 0 ..< paths.count { 

enter image description here

Чтобы увидеть мой график, путь [0] является начать координаты intersection1, путь 1 является intersection1 к intersection2 и пути [2] является intersection2 до конца координат.

На самом деле мой self.path бесполезен, вы можете просто декодировать путь из jsonResult. Причина, по которой я использую self.polylineCoordinates, заключается в том, что я хочу получить все координаты (например, красный треугольник на моем графике), чтобы создать собственную навигацию. В jsonResult вы можете увидеть некоторые ключи, называемые startAt (если я не помню его неправильно) и endAt, они являются координатами, которые представляют собой черный треугольник в моем графике. Причина, по которой вам может понадобиться получить все координаты, является то, что путь от пересечения к другому пересечению может быть не прямой, это может быть кривая, как пересечение1, к пересечению2.

+0

святое дерьмо это кажется удивительным! Спасибо, что нашли время сделать это и извините за долгое ожидание, прежде чем я отвечу. Однако я совершенно новичок в этом, поэтому я не совсем уверен, как я могу показать это и как/что такое json. Не могли бы вы объяснить это? Благодаря! – skyleguy

+0

Кроме того, я хочу быть ясным, что я буду делать это из приложения iOS, а не для Android! – skyleguy

+1

Это Swift, так же как и ios. В основном или просто, как новичок, jsonResult возвращает словарь, например {«name»: {«John»: «мужчина», «Mary»: «женщина», «Bob»: «male»} –

Смежные вопросы