如何在Google地图iOS swift中的两个位置之间绘制路线

Anu*_*han 8 ios google-polyline google-maps-sdk-ios swift

我正在iOS swift项目中使用谷歌地图.我想在地图上的两个位置之间绘制一条路径(非直线).知道怎么做吗?

Ash*_*hah 23

在Swift中的Google Map上的两个位置之间绘制折线.

//在此方法中传递源和目标坐标.

func fetchRoute(from source: CLLocationCoordinate2D, to destination: CLLocationCoordinate2D) {

    let session = URLSession.shared

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

    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], let jsonResponse = jsonResult else {
            print("error in JSONSerialization")
            return
        }

        guard let routes = jsonResponse["routes"] as? [Any] else {
            return
        }

        guard let route = routes[0] as? [String: Any] else {
            return
        }

        guard let overview_polyline = route["overview_polyline"] as? [String: Any] else {
            return
        }

        guard let polyLineString = overview_polyline["points"] as? String else {
            return
        }

        //Call this method to draw path on map
        self.drawPath(from: polyLineString)
    })
    task.resume()
}
Run Code Online (Sandbox Code Playgroud)

在地图上绘制折线.

func drawPath(from polyStr: String){
    let path = GMSPath(fromEncodedPath: polyStr)
    let polyline = GMSPolyline(path: path)
    polyline.strokeWidth = 3.0
    polyline.map = mapView // Google MapView
}
Run Code Online (Sandbox Code Playgroud)

  • 我很欣赏好答案 (2认同)
  • 它在 jsonResult 行显示“条件绑定的初始化程序必须具有可选类型,而不是‘[String : Any]’” (2认同)

Sag*_*ode 18

swift 3.0中使用相机缩放显示谷歌地图中两个位置之间的多条路线:

    let origin = "\(startLocation.coordinate.latitude),\(startLocation.coordinate.longitude)"
    let destination = "\(destinationLocation.coordinate.latitude),\(destinationLocation.coordinate.longitude)"

    let urlString = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving&key=API_KEY"

    let url = URL(string: urlString)
    URLSession.shared.dataTask(with: url!, completionHandler: {
        (data, response, error) in
        if(error != nil){
            print("error")
        }else{
            do{
                let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
                let routes = json["routes"] as! NSArray
                self.mapView.clear()

                OperationQueue.main.addOperation({
                    for route in routes
                    {
                        let routeOverviewPolyline:NSDictionary = (route as! NSDictionary).value(forKey: "overview_polyline") as! NSDictionary
                        let points = routeOverviewPolyline.object(forKey: "points")
                        let path = GMSPath.init(fromEncodedPath: points! as! String)
                        let polyline = GMSPolyline.init(path: path)
                        polyline.strokeWidth = 3

                        let bounds = GMSCoordinateBounds(path: path!)
                        self.mapView!.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 30.0))

                        polyline.map = self.mapView

                    }
                })
            }catch let error as NSError{
                print("error:\(error)")
            }
        }
    }).resume()
Run Code Online (Sandbox Code Playgroud)