как отправить запрос в Google Direction API, чтобы получить путь в Swift

Я новичок в Swift, и я создаю приложение, которое будет показывать местоположение пользователя и ставить маркер в эту позицию. После перемещения пользователя. Маркер будет удален, и будет создан новый маркер. В настоящее время. Я хочу сделать маркеры на точку А и точку Б в приложении и показать маршрут на карте. Он должен использовать ближайшую дорогу на карте. я уже изучаю документ карты Google, но мне нужна помощь, я не могу понять, как проложить маршрут между двумя точками?

Буду рад, если вы мне поможете, большое спасибо.


person Pooria NasiriPour    schedule 17.07.2016    source источник


Ответы (1)


Основываясь на этом блоге, вам нужно сначала добавить свойство let locationManager = CLLocationManager(), который добавит и создаст экземпляр свойства CLLocationManager с именем locationManager.

Затем найдите viewDidLoad() и добавьте эти две строки внизу, которые сделают MapViewController делегатом locationManager и запросят доступ к местоположению пользователя.

locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()

Из этого связанного thread вы должны создать экземпляр класса CLLocationManager в viewDidLoad() следующим образом :

// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization() 

// For use in foreground
self.locationManager.requestWhenInUseAuthorization()

if CLLocationManager.locationServicesEnabled() {
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
}

Затем в методе CLLocationManagerDelegate вы можете получить текущие координаты местоположения пользователя:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    var locValue:CLLocationCoordinate2D = manager.location.coordinate
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}

Затем, чтобы добавить маркер, создайте GMSMarker объект, включающий position и title, и установите его map. В следующем примере показано, как добавить маркер к существующему объекту GMSMapView. Маркер создается с координатами 10,10 и отображает строку «Hello world» в информационном окне при нажатии.

let  position = CLLocationCoordinate2DMake(10, 10)
let marker = GMSMarker(position: position)
marker.title = "Hello World"
marker.map = mapView

Наконец, сделайте маршрут между двумя точками, вы можете проверить эти ссылки:

Теперь в методе createRoute укажите название этого города или что угодно в качестве источника, например:

@IBAction func createRoute(sender: AnyObject) {

    let addressAlert = UIAlertController(title: "Create Route", message: "Connect locations with a route:", preferredStyle:

UIAlertControllerStyle.Alert)

    addressAlert.addTextFieldWithConfigurationHandler { (textField) -> Void in
        //give a origin for route
        textField.text = self.currentLocationName
        textField.userInteractionEnabled = false
    }

    addressAlert.addTextFieldWithConfigurationHandler { (textField) -> Void in
        textField.placeholder = "Destination?"
    }


    let createRouteAction = UIAlertAction(title: "Create Route", style: UIAlertActionStyle.Default) { (alertAction) -> Void in
        let origin = (addressAlert.textFields![0] as! UITextField).text as String
        let destination = (addressAlert.textFields![1] as! UITextField).text as String

        self.mapTasks.getDirections(origin, destination: destination, waypoints: nil, travelMode: nil, completionHandler: {

(статус, успех) -> Пусто, если успех { self.configureMapAndMarkersForRoute() self.drawRoute() self.displayRouteInfo() } else { println(status) } }) }

    let closeAction = UIAlertAction(title: "Close", style: UIAlertActionStyle.Cancel) { (alertAction) -> Void in

    }

    addressAlert.addAction(createRouteAction)
    addressAlert.addAction(closeAction)

    presentViewController(addressAlert, animated: true, completion: nil)
}

Сначала получите координаты всех точек, которые входят в маршрут, затем добавьте широту и долготу этих точек в путь, чтобы нарисовать путь в соответствии с этим

     GMSCameraPosition *cameraPosition=[GMSCameraPosition cameraWithLatitude:18.5203 longitude:73.8567 zoom:12];
        _mapView =[GMSMapView mapWithFrame:CGRectZero camera:cameraPosition];
        _mapView.myLocationEnabled=YES;
        GMSMarker *marker=[[GMSMarker alloc]init];
        marker.position=CLLocationCoordinate2DMake(18.5203, 73.8567);
        marker.icon=[UIImage imageNamed:@"aaa.png"] ;
        marker.groundAnchor=CGPointMake(0.5,0.5);
        marker.map=_mapView;
        GMSMutablePath *path = [GMSMutablePath path];   
        [path addCoordinate:CLLocationCoordinate2DMake(@(18.520).doubleValue,@(73.856).doubleValue)];
        [path addCoordinate:CLLocationCoordinate2DMake(@(16.7).doubleValue,@(73.8567).doubleValue)];

        GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
        rectangle.strokeWidth = 2.f;
        rectangle.map = _mapView;
        self.view=_mapView;

Надеюсь это поможет!

person abielita    schedule 18.07.2016