2016-12-14 3 views
0

Я действительно застрял здесь. я просто узнаю, как показать карту google в моем представлении. И теперь я хочу сделать направление из одного места в другое.Показать направление и рисовать линию на карте google

Вот мой код до сих пор:

@IBAction func direction(_ sender: Any) {  
Alamofire.request("https://maps.googleapis.com/maps/api/directions/json?" + 
     "origin=Disneyland&destination=Universal+Studios+Hollywood4&").responseJSON 
     {response in 
      if(response.result.isSuccess){ 
       print(response.result.value) 

Ссылка, которую я использую пример из Интернета. Прямо сейчас я просто хочу знать, как сделать линию и направление. Спасибо за помощь

+0

Вы хотите нарисовать ломаную линию между двумя точками? –

ответ

1

Отвечу в Swift 2 из моего фрагмента кода

//MARK:- Draw Route Betweeen two points 
/** 
To draw a route between to cordinates. 

- parameter origin:   Source marker cordinate 
- parameter destination:  destination marker cordinate 
- parameter zoomCamera:  True if you want to zoom the map. 
- parameter completionHandler: GMSPolyline - to draw the route. 
*/ 

func drawRoute(origin: CLLocation, destination: CLLocation, zoomCamera : Bool!, completionHandler: (polyline : AnyObject) -> Void) 
{ 
    let key : String = Macros.apiKeys.key 

    let originString: String = "\(origin.coordinate.latitude),\(origin.coordinate.longitude)" 

    let destinationString: String = "\(destination.coordinate.latitude),\(destination.coordinate.longitude)" 

    let directionsAPI: String = "https://maps.googleapis.com/maps/api/directions/json?" 

    let directionsUrlString: String = "\(directionsAPI)&origin=\(originString)&destination=\(destinationString)&key=\(key)" 

    Alamofire.request(.GET, directionsUrlString, parameters: ["": ""]) 
     .responseJSON { response in 

      if let JSON = response.result.value 
      { 
       self.getRoutesWayPointsBetweenCordinates(origin.coordinate, destination: destination.coordinate, completionHandler: 
        { (routesArray) in 

         if routesArray.count > 0 
         { 
          let routesArray : NSArray = JSON.objectForKey("routes") as! NSArray 

          if routesArray.count > 0 
          { 
           let routeDic = routesArray[0] 

           let routeOverviewPolyline = routeDic .objectForKey("overview_polyline") 

           let points : String = routeOverviewPolyline! .objectForKey("points") as! String 


           // Creating Path between source and destination. 
            self.path = GMSPath(fromEncodedPath: points) 

            if self.polyline != nil 
            { 
             self.polyline.map = nil 
            } 

            self.polyline = GMSPolyline(path: self.path) 

            self.polyline.strokeWidth = 4.5 

            self.polyline.geodesic = true 

            self.animateRoute(self.polyline, origin: origin.coordinate, destination: destination.coordinate, pathColor:UIColor.blueColor(), zoomCamera: zoomCamera) 

            completionHandler(polyline: self.polyline) 
          } 

         }else 
         { 
          let poly : GMSPolyline = GMSPolyline() 
          poly.strokeWidth = 5.5 
          completionHandler(polyline: poly) 
         } 
       }) 
      } 
    } 
} 


func animateRoute(polyline : GMSPolyline, origin : CLLocationCoordinate2D, destination : CLLocationCoordinate2D, pathColor : UIColor, zoomCamera : Bool!) 
{ 

    polyline.strokeColor = pathColor 

    polyline.map = self.customMapView // Drawing route 

    let bounds = GMSCoordinateBounds(path: path) 

    var pad : CGFloat = 40.0 

    if padding != nil 
    { 
     pad = padding 
    } 
    if zoomCamera == true 
    { 
     zoomCameraWithBounds(bounds, pad: pad) 
    } 
} 

/** 
It will zoom the camera at specific bounds 

- parameter bounds: Bounds around which the camera should zoom 
- parameter pad: Padding value from the edges of the window. 
*/ 
func zoomCameraWithBounds(bounds : GMSCoordinateBounds, pad : CGFloat) 
{ 
    let camera = self.customMapView.cameraForBounds(bounds, insets:UIEdgeInsetsZero) 

    self.customMapView.camera = camera! 

    let zoomCamera = GMSCameraUpdate.fitBounds(bounds, withPadding: pad) 

    self.customMapView.animateWithCameraUpdate(zoomCamera) // Above lines will update map camera to fit to bounds so that the complete route between source and destination is visible. 
} 

Что вы делаете, это вызвать функцию drawRoute и передать ей исходные и целевые координаты, а также использовать Alamofir е для апи хит

Важные Изменяйте эту Macros.apiKeys.key с ваш Google API ключ и убедитесь, что он имеет соответствующие характеристики позволили

0

Объясню с помощью объектива-c. Надеюсь, вы сможете перевести его быстро.

Вы уже используете это pod 'GoogleMaps', верно? Я думаю, что вы уже успели показать карты Google.

GMSMapView *mapView_ = [GMSMapView mapWithFrame:self.mapView.frame camera:camera]; 

....

Так что я пропущу его.

Здесь я просто объясню, как показать направление.

NSString *url_string = @"https://maps.googleapis.com/maps/api/directions/json?origin=Disneyland&destination=Universal+Studios+Hollywood4&"; 

Если происхождение и назначение широта и долгота вы можете использовать этот API: "https://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f"

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url_string]]; 

if (data) { 

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSArray *routesArray = [json objectForKey:@"routes"]; 
NSDictionary *routeDict = [routesArray objectAtIndex:0]; 
NSDictionary *routeOverviewPolyline = [routeDict objectForKey:@"overview_polyline"]; 
NSString *points = [routeOverviewPolyline objectForKey:@"points"]; 

GMSMutablePath *path = [GMSMutablePath path]; 
path = [GMSPath pathFromEncodedPath:points].mutableCopy; 

GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path]; 
rectangle.map = mapView_; 

} 
Смежные вопросы