使用GoogleMaps SDK生成路线?

时间:2016-09-22 22:12:24

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

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

1 个答案:

答案 0 :(得分: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日更新

你快到了。路径[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,path [2]是intersection2到end坐标。

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