PolyLines未在谷歌地图中显示

muk*_*kta 3 google-maps-api-3 google-maps-markers ios google-polyline swift

我想在谷歌地图上显示目的地和来源之间的路径.我是谷歌方向api的坐标之间的路线,我得到回应并设置在谷歌地图,但没有在地图上显示.我的代码是

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

    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)

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

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

        DispatchQueue.main.async {

            if error != nil {
                print(error!.localizedDescription)
                AppManager.dissmissHud()
            }
            else {
                do {
                    if let json : [String:Any] = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]{

                        guard let routes = json["routes"] as? NSArray else {
                            DispatchQueue.main.async {
                                AppManager.dissmissHud()
                            }
                            return
                        }

                        if (routes.count > 0) {
                            let overview_polyline = routes[0] as? NSDictionary
                            let dictPolyline = overview_polyline?["overview_polyline"] as? NSDictionary

                            let points = dictPolyline?.object(forKey: "points") as? String

                            self.showPath(polyStr: points!)

                            DispatchQueue.main.async {
                                AppManager.dissmissHud()

                                let bounds = GMSCoordinateBounds(coordinate: source, coordinate: destination)
                                let update = GMSCameraUpdate.fit(bounds, with: UIEdgeInsetsMake(75, 20, 20, 20))
                                self.vwMap!.moveCamera(update)
                            }
                        }
                        else {
                            DispatchQueue.main.async {
                                AppManager.dissmissHud()
                            }
                        }
                    }
                }
                catch {
                    print("error in JSONSerialization")
                    DispatchQueue.main.async {
                        AppManager.dissmissHud()
                    }
                }
            }
        }
    })
    task.resume()
}


func drawPlyLineOnMap()  {

    let source : CLLocationCoordinate2D  =  CLLocationCoordinate2DMake(Double((model?.fromAddressLatitude)!), Double((model?.fromAddressLongtitude)!))
    let destination : CLLocationCoordinate2D  =  CLLocationCoordinate2DMake(Double((model?.toAddressLatitude)!), Double((model?.toAddressLongtitude)!))

    self.vwMap.clear()
    //Source pin
    let marker = GMSMarker()
    let markerImage = UIImage(named: "from_pin")!.withRenderingMode(.alwaysOriginal)
    let markerView = UIImageView(image: markerImage)
    marker.position = source
    marker.iconView = markerView
    //marker.userData = dict
    marker.map = vwMap

    //Destination pin
    let markerTo = GMSMarker()
    let markerImageTo = UIImage(named: "to_red_pin")!.withRenderingMode(.alwaysOriginal)
    let markerViewTo = UIImageView(image: markerImageTo)
    markerTo.position = destination
    // marker.userData = dict
    markerTo.iconView = markerViewTo
    markerTo.map = vwMap

    var arrAdTemp:[AddressTableModel] = []
    arrAdTemp.append(contentsOf: arrAddresses)
    arrAdTemp.removeLast()
    arrAdTemp.removeFirst()
    for obj in arrAdTemp {
        print(obj.strLatitude)
        print(obj.strLongtitude)
        let stopOver : CLLocationCoordinate2D  =  CLLocationCoordinate2DMake(obj.strLatitude, obj.strLongtitude)
        let markerStop = GMSMarker()
        let markerImageStop = UIImage(named: "to_red_pin")!.withRenderingMode(.alwaysOriginal)
        let markerViewStop = UIImageView(image: markerImageStop)
        markerStop.position = stopOver
        //marker.userData = dict
        markerStop.iconView = markerViewStop
        markerStop.map = vwMap
    }

    self.getPolylineRoute(from: source, to: destination)
}

func showPath(polyStr :String){
    let path = GMSPath(fromEncodedPath: polyStr)
    let polyline = GMSPolyline(path: path)
    polyline.strokeWidth = 3.0
    polyline.strokeColor = UIColor.black
    polyline.map = vwMap // Your map view
}
Run Code Online (Sandbox Code Playgroud)

我在下面尝试了很多答案,但没有为我工作.请帮我.

  1. 第一个答案试了
  2. 第二个答案试了
  3. 第3个回答试了

Vin*_*mar 5

你设置了错误的边界,所以它没有显示在你的地图上.我已经尝试过你的代码它工作正常.请将您的边界区域更改为(0,0,0,0)

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

        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)

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

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

            DispatchQueue.main.async {

                if error != nil {
                    print(error!.localizedDescription)
                    AppManager.dissmissHud()
                }
                else {
                    do {
                        if let json : [String:Any] = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]{

                            guard let routes = json["routes"] as? NSArray else {
                                DispatchQueue.main.async {
                                    AppManager.dissmissHud()
                                }
                                return
                            }

                            if (routes.count > 0) {
                                let overview_polyline = routes[0] as? NSDictionary
                                let dictPolyline = overview_polyline?["overview_polyline"] as? NSDictionary

                                let points = dictPolyline?.object(forKey: "points") as? String

                                self.showPath(polyStr: points!)

                                DispatchQueue.main.async {
                                    AppManager.dissmissHud()

                                    let bounds = GMSCoordinateBounds(coordinate: source, coordinate: destination)
//below bounds change as 0 check it on full screen
                                    let update = GMSCameraUpdate.fit(bounds, with: UIEdgeInsetsMake(0, 0, 0, 0))
                                    self.vwMap!.moveCamera(update)
                                }
                            }
                            else {
                                DispatchQueue.main.async {
                                    AppManager.dissmissHud()
                                }
                            }
                        }
                    }
                    catch {
                        print("error in JSONSerialization")
                        DispatchQueue.main.async {
                            AppManager.dissmissHud()
                        }
                    }
                }
            }
        })
        task.resume()
    }
Run Code Online (Sandbox Code Playgroud)