son saber ruta pais otro mide medir mapas lugar kilometros habla google distancias distancia disponible cómo cuantos como ios google-maps ios7 google-polyline gmsmapview

saber - Ruta de dibujo entre dos lugares en GMSMapView en iOS



medir radio en google maps (10)

Aquí hay una traducción de Swift de la respuesta de johny kumar.

let cameraPositionCoordinates = CLLocationCoordinate2D(latitude: 18.5203, longitude: 73.8567) let cameraPosition = GMSCameraPosition.cameraWithTarget(cameraPositionCoordinates, zoom: 12) let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: cameraPosition) mapView.myLocationEnabled = true let marker = GMSMarker() marker.position = CLLocationCoordinate2DMake(18.5203, 73.8567) marker.groundAnchor = CGPointMake(0.5, 0.5) marker.map = mapView let path = GMSMutablePath() path.addCoordinate(CLLocationCoordinate2DMake(18.520, 73.856)) path.addCoordinate(CLLocationCoordinate2DMake(16.7, 73.8567)) let rectangle = GMSPolyline(path: path) rectangle.strokeWidth = 2.0 rectangle.map = mapView self.view = mapView

Estoy desarrollando una aplicación iOS. En esa aplicación estoy teniendo 2 campos desde y hacia. Ingresé la dirección usando Google Auto Complete API. Y también puedo obtener la latitud y la longitud de los 2 lugares y puedo mostrar marcadores en GMSMapView .

Ahora quiero dibujar la ruta entre estos 2 lugares. Encontré una solución cuando usamos MKMapView . Pero no GMSMapView encontrar la solución para GMSMapView . por favor ayúdame a dibujar la ruta entre estos 2 puntos en GMSMapView .

Si es posible, por favor dame algunos enlaces importantes para esto.

Gracias.


DirectionResponse from the Google Directions API Los NSLogs son útiles para ver con qué está trabajando.

[[GMDirectionService sharedInstance] getDirectionsFrom:origin to:destination succeeded:^(GMDirection *directionResponse) { if ([directionResponse statusOK]){ NSLog(@"Duration : %@", [directionResponse durationHumanized]); NSLog(@"Distance : %@", [directionResponse distanceHumanized]); NSArray *routes = [[directionResponse directionResponse] objectForKey:@"routes"]; // NSLog(@"Route : %@", [[directionResponse directionResponse] objectForKey:@"routes"]); GMSPath *path = [GMSPath pathFromEncodedPath:routes[0][@"overview_polyline"] [@"points"]]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeColor = [UIColor redColor]; polyline.strokeWidth = 5.f; polyline.map = mapView; } } failed:^(NSError *error) { NSLog(@"Can''t reach the server") }];


He escrito el siguiente código que debería ser el truco para ti:

- (void)drawRoute { [self fetchPolylineWithOrigin:myOrigin destination:myDestination completionHandler:^(GMSPolyline *polyline) { if(polyline) polyline.map = self.myMap; }]; } - (void)fetchPolylineWithOrigin:(CLLocation *)origin destination:(CLLocation *)destination completionHandler:(void (^)(GMSPolyline *))completionHandler { NSString *originString = [NSString stringWithFormat:@"%f,%f", origin.coordinate.latitude, origin.coordinate.longitude]; NSString *destinationString = [NSString stringWithFormat:@"%f,%f", destination.coordinate.latitude, destination.coordinate.longitude]; NSString *directionsAPI = @"https://maps.googleapis.com/maps/api/directions/json?"; NSString *directionsUrlString = [NSString stringWithFormat:@"%@&origin=%@&destination=%@&mode=driving", directionsAPI, originString, destinationString]; NSURL *directionsUrl = [NSURL URLWithString:directionsUrlString]; NSURLSessionDataTask *fetchDirectionsTask = [[NSURLSession sharedSession] dataTaskWithURL:directionsUrl completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; if(error) { if(completionHandler) completionHandler(nil); return; } NSArray *routesArray = [json objectForKey:@"routes"]; GMSPolyline *polyline = nil; if ([routesArray count] > 0) { NSDictionary *routeDict = [routesArray objectAtIndex:0]; NSDictionary *routeOverviewPolyline = [routeDict objectForKey:@"overview_polyline"]; NSString *points = [routeOverviewPolyline objectForKey:@"points"]; GMSPath *path = [GMSPath pathFromEncodedPath:points]; polyline = [GMSPolyline polylineWithPath:path]; } // run completionHandler on main thread dispatch_sync(dispatch_get_main_queue(), ^{ if(completionHandler) completionHandler(polyline); }); }]; [fetchDirectionsTask resume]; }


Hola, puedes usar "LRouteController", es la mejor manera de mostrar la ruta de una carretera entre dos puntos como:

[_routeController getPolyline With Locations: (Array of first and last location)]

Pruébalo, espero que esto resuelva tu problema.


Lo hice con AlamoFire y SwiftyJson en xCode 8.3.3 y Swift 3.1. Coloque el dibujo de la ruta en una función que solo necesita dos parámetros

un ejemplo de origen de cadena "48.7788,9.22222" y un ejemplo de destino de cadena "49.3212232,8.334151"

func drawPath (origin: String, destination: String) { /* set the parameters needed */ String prefTravel = "walking" /* options are driving, walking, bicycling */ String gmapKey = "Ask Google" /* Make the url */ let url = URL(string: "https://maps.googleapis.com/maps/api/directions/json?origin=/(origin)&destination=/(destination)&mode=/(prefTravel)&key=" + gmapKey) /* Fire the request */ Alamofire.request(url!).responseJSON{(responseData) -> Void in if((responseData.result.value) != nil) { /* read the result value */ let swiftyJsonVar = JSON(responseData.result.value!) /* only get the routes object */ if let resData = swiftyJsonVar["routes"].arrayObject { let routes = resData as! [[String: AnyObject]] /* loop the routes */ if routes.count > 0 { for rts in routes { /* get the point */ let overViewPolyLine = rts["overview_polyline"]?["points"] let path = GMSMutablePath(fromEncodedPath: overViewPolyLine as! String) /* set up poly line */ let polyline = GMSPolyline.init(path: path) polyline.strokeWidth = 2 polyline.map = self.mapView } } } } } }


Realice una solicitud de URL a Google Directions API y cuando reciba un archivo JSON, siga todos los pasos y descodifique los objetos de puntos.


Si alguien está buscando Swift 3.0 para la respuesta de @Tarek, puede usar esto. Esto también usa Alamofire y SwiftyJSON .

func drawPath() { let origin = "/(currentLocation.latitude),/(currentLocation.longitude)" let destination = "/(destinationLoc.latitude),/(destinationLoc.longitude)" let url = "https://maps.googleapis.com/maps/api/directions/json?origin=/(origin)&destination=/(destination)&mode=driving&key=YOURKEY" Alamofire.request(url).responseJSON { response in print(response.request) // original URL request print(response.response) // HTTP URL response print(response.data) // server data print(response.result) // result of response serialization let json = JSON(data: response.data!) let routes = json["routes"].arrayValue for route in routes { let routeOverviewPolyline = route["overview_polyline"].dictionary let points = routeOverviewPolyline?["points"]?.stringValue let path = GMSPath.init(fromEncodedPath: points!) let polyline = GMSPolyline.init(path: path) polyline.map = self.mapView } } }


- Swift 3.0 y XCode 8.0 Staright Line :(

let cameraPosition = GMSCameraPosition.camera(withLatitude: 18.5203, longitude: 73.8567, zoom: 12) self.mapView = GMSMapView.map(withFrame: CGRect.zero, camera: cameraPosition) self.mapView.isMyLocationEnabled = true let marker = GMSMarker() marker.position = CLLocationCoordinate2DMake(18.5203, 73.8567) // marker.icon = UIImage(named: "aaa.png")! marker.groundAnchor = CGPoint(x: 0.5, y: 0.5) marker.map = mapView let path = GMSMutablePath() path.add(CLLocationCoordinate2DMake(CDouble((18.520)), CDouble((73.856)))) path.add(CLLocationCoordinate2DMake(CDouble((16.7)), CDouble((73.8567)))) let rectangle = GMSPolyline.init(path: path) rectangle.strokeWidth = 2.0 rectangle.map = mapView self.view = mapView


Para swift 3 dibujar polilínea

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=YOURKEY")! let task = session.dataTask(with: url, completionHandler: { (data, response, error) in if error != nil { print(error!.localizedDescription) self.activityIndicator.stopAnimating() } 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 { self.activityIndicator.stopAnimating() } 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 { self.activityIndicator.stopAnimating() let bounds = GMSCoordinateBounds(coordinate: source, coordinate: destination) let update = GMSCameraUpdate.fit(bounds, with: UIEdgeInsetsMake(170, 30, 30, 30)) self.mapView!.moveCamera(update) } } else { DispatchQueue.main.async { self.activityIndicator.stopAnimating() } } } } catch { print("error in JSONSerialization") DispatchQueue.main.async { self.activityIndicator.stopAnimating() } } } }) task.resume() } func showPath(polyStr :String){ let path = GMSPath(fromEncodedPath: polyStr) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 3.0 polyline.strokeColor = UIColor.red polyline.map = mapView // Your map view }

Nota: debe colocar la clave API de googleDirection en la URL.


`first get all points coordinates which are coming in route then add these points latitude and longitude in path in will draw path according to that` 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;