【问题标题】:Use GoogleMaps SDK to generate routes?使用 GoogleMaps SDK 生成路线?
【发布时间】:2016-10-20 14:58:49
【问题描述】:

我是个新手,正在努力使用 Google Maps sdk。是否可以使用 google maps sdk 实际生成路线?就像我可以制作一个显示“生成路线”的按钮,然后单击它会生成一条用户可以实际导航的路线,就像他们使用真正的谷歌地图应用程序一样?谢谢。

【问题讨论】:

    标签: ios swift google-maps-sdk-ios


    【解决方案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

    // 10 月 15 日更新

    我猜你遇到了编码路径的问题。这是我解码路径的方法。我很确定我不是在做最简单的方法,但我只是忽略它,因为它确实有效。哈哈

    // 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 地图的导航。我自己构建我的应用程序的导航。如果可以的话,我可以尝试帮助你。

    // 10 月 20 日更新

    你快到了。 path[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 {
    

    查看我的图表,path[0] 是 intersection1 的起始坐标,path1 是 intersection1 到 intersection2 的坐标,path[2] 是 intersection2 到结束坐标的坐标。

    其实我的self.path是没用的,你可以直接从jsonResult解码路径。我使用 self.polylineCoordinates 的原因是因为我想获取所有坐标(如图表中的红色三角形)来创建自己的导航。在 jsonResult 中,您可以看到一些名为 startAt(如果我没记错的话)和 endAt 的键,它们是坐标,在我的图表中表示为黑色三角形。您可能需要获取所有坐标的原因是因为从交叉点到另一个交叉点的路径可能不是一条直线,它可以是一条曲线,例如从交叉点 1 到交叉点 2。

    【讨论】:

    • 天哪,这看起来棒极了!感谢您抽出宝贵的时间来做这件事,很抱歉在我回复之前让您久等了。但是我对此很陌生,所以我不太确定如何显示这个或如何/什么是 json。你能进一步解释一下吗?谢谢!
    • 另外,我想明确一点,我会从 iOS 应用程序而不是 Android 应用程序执行此操作!
    • 这是 Swift,iOS 也是。大多数或简单的初学者, jsonResult 返回一个字典,如 {"name": {"John": "male", "Mary": "female", "Bob": "male}}
    • 如果我将上面的代码放入我的 viewController.swift 中,我是否能够将该功能链接到一个按钮,并且每当用户单击该按钮时,都会提示他们输入一个位置to,然后函数会运行并显示结果?
    • 是的。你可以。首先尝试查看(打印)您在 jsonResult 中得到的内容。然后转换数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多