Swift iOS谷歌地图,协调路径

Dol*_*eno 3 directions google-maps-sdk-ios swift

我正在尝试在我的应用程序中创建一个函数,该函数将引导用户使用我创建的标记.这是我正在使用的代码,它运行良好,它获取用户当前位置并在地图上显示它.但是如何获得标记的指示?

任何芒果都会有所帮助

class Karta: UIViewController, CLLocationManagerDelegate {
    @IBOutlet var mapView: GMSMapView!

    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        //allow app to track user
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

        //set out a marker on the map
        var marker = GMSMarker()
        marker.position = CLLocationCoordinate2DMake(56.675907, 12.858798)
        marker.appearAnimation = kGMSMarkerAnimationPop
        marker.icon = UIImage(named: "flag_icon")
        marker.map = mapView
     }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "Types Segue" {
            let navigationController = segue.destinationViewController as UINavigationController
        }
    }

    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

        //If map is being used
        if status == .AuthorizedWhenInUse {
            var myLocation = mapView
            locationManager.startUpdatingLocation()
            mapView.myLocationEnabled = true
            mapView.settings.myLocationButton = true
        }
    }

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        if let location = locations.first as? CLLocation {
            mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
          locationManager.stopUpdatingLocation()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ris 15

所以我最近刚刚解决了这个问题,这是我使用最新版Alamofire(4.3)的Swift 3实现

 func fetchMapData() { 

    let directionURL = "https://maps.googleapis.com/maps/api/directions/json?" +
        "origin=\(originAddressLat),\(originAddressLng)&destination=\(destinationAddressLat),\(destinationAddressLong)&" +
    "key=YOUROWNSERVERKEY"



    Alamofire.request(directionURL).responseJSON
        { response in

            if let JSON = response.result.value {

                let mapResponse: [String: AnyObject] = JSON as! [String : AnyObject]

                let routesArray = (mapResponse["routes"] as? Array) ?? []

                let routes = (routesArray.first as? Dictionary<String, AnyObject>) ?? [:]

                let overviewPolyline = (routes["overview_polyline"] as? Dictionary<String,AnyObject>) ?? [:]
                let polypoints = (overviewPolyline["points"] as? String) ?? ""
                let line  = polypoints

                self.addPolyLine(encodedString: line)
        }
    }

}

func addPolyLine(encodedString: String) {

    let path = GMSMutablePath(fromEncodedPath: encodedString)
    let polyline = GMSPolyline(path: path)
    polyline.strokeWidth = 5
    polyline.strokeColor = .blue
    polyline.map = whateverYourMapViewObjectIsCalled

}
Run Code Online (Sandbox Code Playgroud)


LC *_*C 웃 7

免责声明:斯威夫特2

 func addOverlayToMapView(){

        let directionURL = "https://maps.googleapis.com/maps/api/directions/json?origin=\(srcLocation.coordinate.latitude),\(srcLocation.coordinate.longitude)&destination=\(destLocation.coordinate.latitude),\(destLocation.coordinate.longitude)&key=Your Server Key"

        Alamofire.request(.GET, directionURL, parameters: nil).responseJSON { response in

            switch response.result {

            case .Success(let data):

                let json = JSON(data)
                print(json)

                let errornum = json["error"]


                if (errornum == true){



                }else{
                    let routes = json["routes"].array

                    if routes != nil{

                        let overViewPolyLine = routes![0]["overview_polyline"]["points"].string
                        print(overViewPolyLine)
                        if overViewPolyLine != nil{

                         self.addPolyLineWithEncodedStringInMap(overViewPolyLine!)

                        }

                    }


                }

            case .Failure(let error):

                print("Request failed with error: \(error)")

            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

使用这些点,我们现在使用两点创建路径 fromEncodedPath

  func addPolyLineWithEncodedStringInMap(encodedString: String) {

        let path = GMSMutablePath(fromEncodedPath: encodedString)
        let polyLine = GMSPolyline(path: path)
        polyLine.strokeWidth = 5
        polyLine.strokeColor = UIColor.yellowColor()
        polyLine.map = mapView

    }
Run Code Online (Sandbox Code Playgroud)


Rom*_*ain 5

与Apple的MapKit不同,iOS的Google Maps SDK本身并不包含执行路线计算的方法。

相反,您需要使用Google Directions API:https : //developers.google.com/maps/documentation/directions/。它是仅HTTP的API,Google到目前为止还没有提供任何SDK,但是您可以轻松地自己编写包装器,或者选择Github上可用的众多选项之一: