Em breve, vamos lançar uma nova estilização de mapas na Plataforma Google Maps. Essa atualização da estilização de mapas inclui uma nova paleta de cores padrão e melhorias nas experiências e usabilidade dos mapas. Todos os estilos de mapa vão ser atualizados automaticamente em março de 2025. Para mais informações sobre disponibilidade e como ativar o recurso antes, consulte Novo estilo de mapa para a Plataforma Google Maps.
Mostrar/esconder o código Swift para receber informações de trajeto.
/**Copyright2017GoogleInc.Allrightsreserved.**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,software*distributedundertheLicenseisdistributedonan"AS IS"BASIS,*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.*SeetheLicenseforthespecificlanguagegoverningpermissionsand*limitationsundertheLicense.*/importGoogleNavigationimportUIKitclassViewController:UIViewController{varmapView:GMSMapView!varlocationManager:CLLocationManager!overridefuncloadView(){locationManager=CLLocationManager()letcamera=GMSCameraPosition.camera(withLatitude:47.67,longitude:-122.20,zoom:14)mapView=GMSMapView.map(withFrame:CGRect.zero,camera:camera)//Showthetermsandconditions.letcompanyName="Ride Sharing Co."GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(withCompanyName:companyName){termsAcceptedinguardtermsAcceptedelse{//Handlethecasewhentheuserrejectsthetermsandconditions.return}//Enablenavigationaftertheuseracceptstheterms.self.mapView.isNavigationEnabled=true//Requestauthorizationtouselocationservices.self.locationManager.requestAlwaysAuthorization()}self.view=mapViewmakeButtons()}//Createarouteandstartguidance.funcstartNav(){vardestinations=[GMSNavigationWaypoint]()destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJnUYTpNASkFQR_gSty5kyoUk",title:"PCC Natural Market")!)destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",title:"Marina Park")!)mapView.navigator?.setDestinations(destinations){routeStatusinguardrouteStatus==.OKelse{print("Handle route statuses that are not OK.")return}self.mapView.navigator?.isGuidanceActive=trueself.mapView.cameraMode=.followingself.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()}mapView.roadSnappedLocationProvider?.startUpdatingLocation()}funcgetTimeToNextDestination(){ifletnavigator=mapView.navigator{lettime=navigator.timeToNextDestinationletminutes=floor(time/60)letseconds=round(time-minutes*60)print("Time to next destination: \(minutes):\(seconds)")}}funcgetDistanceToNextDestination(){ifletnavigator=mapView.navigator{letdistance=navigator.distanceToNextDestinationletmiles=distance*0.00062137print("Distance to next destination: \(miles) miles.")}}funcgetCurrentRouteLeg(){ifletnavigator=mapView.navigator{letcurrentLeg=navigator.currentRouteLegletnextDestination=currentLeg?.destinationWaypoint?.title??"Not Available"letlat=currentLeg?.destinationCoordinate.latitude.description??"Not Available"letlng=currentLeg?.destinationCoordinate.longitude.description??"Not Available"print("Destination: \(nextDestination) at (\(lat),\(lng)")}}funcgetTraveledPath(){ifletnavigator=mapView.navigator{letlatestPath=navigator.traveledPathiflatestPath.count() > 0{letbegin:CLLocationCoordinate2D=latestPath.coordinate(at:0)letcurrent:CLLocationCoordinate2D=latestPath.coordinate(at:latestPath.count()-1)print("Path from (\(begin.latitude),\(begin.longitude)) to (\(current.latitude),\(current.longitude))")}}}//Addsomebuttonstotheview.funcmakeButtons(){//Startnavigation.letnavButton=UIButton(frame:CGRect(x:5,y:150,width:200,height:35))navButton.backgroundColor=.bluenavButton.alpha=0.5navButton.setTitle("Start navigation",for:.normal)navButton.addTarget(self,action:#selector(startNav), for: .touchUpInside)self.mapView.addSubview(navButton)//Getthetimetothenextdestination.lettimeButton=UIButton(frame:CGRect(x:5,y:190,width:200,height:35))timeButton.backgroundColor=.bluetimeButton.alpha=0.5timeButton.setTitle("Time to next destination",for:.normal)timeButton.addTarget(self,action:#selector(getTimeToNextDestination), for: .touchUpInside)self.mapView.addSubview(timeButton)//Getthedistancetothenextdestination.letdistanceButton=UIButton(frame:CGRect(x:5,y:230,width:200,height:35))distanceButton.backgroundColor=.bluedistanceButton.alpha=0.5distanceButton.setTitle("Distance to next destination",for:.normal)distanceButton.addTarget(self,action:#selector(getDistanceToNextDestination), for: .touchUpInside)self.mapView.addSubview(distanceButton)//Getthecurrentrouteleg.letrouteButton=UIButton(frame:CGRect(x:5,y:270,width:200,height:35))routeButton.backgroundColor=.bluerouteButton.alpha=0.5routeButton.setTitle("Get current route leg",for:.normal)routeButton.addTarget(self,action:#selector(getCurrentRouteLeg), for: .touchUpInside)self.mapView.addSubview(routeButton)//Getthemostrecentlytraveledpath.letpathButton=UIButton(frame:CGRect(x:5,y:310,width:200,height:35))pathButton.backgroundColor=.bluepathButton.alpha=0.5pathButton.setTitle("Get traveled path",for:.normal)pathButton.addTarget(self,action:#selector(getTraveledPath), for: .touchUpInside)self.mapView.addSubview(pathButton)}}
Mostrar/ocultar o código Objective-C para receber informações da rota.
/* * Copyright 2017 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#import "ViewController.h"@importGoogleNavigation;@interfaceViewController()@end@implementationViewController{GMSMapView*_mapView;CLLocationManager*_locationManager;}-(void)loadView{_locationManager=[[CLLocationManageralloc]init];GMSCameraPosition*camera=[GMSCameraPositioncameraWithLatitude:47.67longitude:-122.20zoom:14];_mapView=[GMSMapViewmapWithFrame:CGRectZerocamera:camera];// Show the terms and conditions.NSString*companyName=@"Ride Sharing Co.";[GMSNavigationServicesshowTermsAndConditionsDialogIfNeededWithCompanyName:companyNamecallback:^(BOOLtermsAccepted){if(termsAccepted){// Enable navigation if the user accepts the terms._mapView.navigationEnabled=YES;// Request authorization to use location services.[_locationManagerrequestAlwaysAuthorization];}else{// Handle the case when the user rejects the terms and conditions.}}];self.view=_mapView;[selfmakeButtons];}// Create a route and start guidance.-(void)startNav{NSArray<GMSNavigationWaypoint*>*destinations=@[[[GMSNavigationWaypointalloc]initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"title:@"PCC Natural Market"],[[GMSNavigationWaypointalloc]initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"title:@"Marina Park"]];[_mapView.navigatorsetDestinations:destinationscallback:^(GMSRouteStatusrouteStatus){_mapView.navigator.guidanceActive=YES;_mapView.cameraMode=GMSNavigationCameraModeFollowing;[_mapView.locationSimulatorsimulateLocationsAlongExistingRoute];}];[_mapView.roadSnappedLocationProviderstartUpdatingLocation];}-(void)getTimeToNextDestination{NSTimeIntervaltime=_mapView.navigator.timeToNextDestination;intminutes=floor(time/60);intseconds=round(time-minutes*60);NSLog(@"%@",[NSStringstringWithFormat:@"Time to next destination: %i:%i.",minutes,seconds]);}-(void)getDistanceToNextDestination{CLLocationDistancedistance=_mapView.navigator.distanceToNextDestination;doublemiles=distance*0.00062137;NSLog(@"%@",[NSStringstringWithFormat:@"Distance to next destination: %.2f.",miles]);}-(void)getCurrentRouteLeg{GMSRouteLeg*currentSegment=_mapView.navigator.currentRouteLeg;NSString*nextDestination=currentSegment.destinationWaypoint.title;CLLocationDegreeslat=currentSegment.destinationCoordinate.latitude;CLLocationDegreeslng=currentSegment.destinationCoordinate.longitude;NSLog(@"%@",[NSStringstringWithFormat:@"%@, %f/%f",nextDestination,lat,lng]);}-(void)getTraveledPath{GMSPath*latestPath=_mapView.navigator.traveledPath;if(latestPath.count > 0){CLLocationCoordinate2Dbegin=[latestPathcoordinateAtIndex:0];CLLocationCoordinate2Dcurrent=[latestPathcoordinateAtIndex:latestPath.count-1];NSLog(@"Path from %f/%f to %f/%f",begin.latitude,begin.longitude,current.latitude,current.longitude);}}#pragma mark - Buttons and things// Add some buttons to the view.-(void)makeButtons{// Start navigation.UIButton*navButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[navButtonaddTarget:selfaction:@selector(startNav)forControlEvents:UIControlEventTouchUpInside];[navButtonsetTitle:@"Start navigation"forState:UIControlStateNormal];[navButtonsetBackgroundColor:[UIColorblueColor]];[navButtonsetAlpha:0.5];navButton.frame=CGRectMake(5.0,150.0,200.0,35.0);[_mapViewaddSubview:navButton];// Get the time to the next destination.UIButton*timeButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[timeButtonaddTarget:selfaction:@selector(getTimeToNextDestination)forControlEvents:UIControlEventTouchUpInside];[timeButtonsetTitle:@"Time to next destination"forState:UIControlStateNormal];[timeButtonsetBackgroundColor:[UIColorblueColor]];[timeButtonsetAlpha:0.5];timeButton.frame=CGRectMake(5.0,190.0,200.0,35.0);[_mapViewaddSubview:timeButton];// Get the distance to the next destination.UIButton*distanceButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[distanceButtonaddTarget:selfaction:@selector(getDistanceToNextDestination)forControlEvents:UIControlEventTouchUpInside];[distanceButtonsetTitle:@"Distance to next destination"forState:UIControlStateNormal];[distanceButtonsetBackgroundColor:[UIColorblueColor]];[distanceButtonsetAlpha:0.5];distanceButton.frame=CGRectMake(5.0,230.0,200.0,35.0);[_mapViewaddSubview:distanceButton];// Get the current route leg.UIButton*routeButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[routeButtonaddTarget:selfaction:@selector(getCurrentRouteLeg)forControlEvents:UIControlEventTouchUpInside];[routeButtonsetTitle:@"Get current route leg"forState:UIControlStateNormal];[routeButtonsetBackgroundColor:[UIColorblueColor]];[routeButtonsetAlpha:0.5];routeButton.frame=CGRectMake(5.0,270.0,200.0,35.0);[_mapViewaddSubview:routeButton];// Get the most recently traveled path.UIButton*pathButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[pathButtonaddTarget:selfaction:@selector(getTraveledPath)forControlEvents:UIControlEventTouchUpInside];[pathButtonsetTitle:@"Get current route leg"forState:UIControlStateNormal];[pathButtonsetBackgroundColor:[UIColorblueColor]];[pathButtonsetAlpha:0.5];pathButton.frame=CGRectMake(5.0,310.0,200.0,35.0);[_mapViewaddSubview:pathButton];}@end
Tempo para chegar ao próximo destino
Para saber o tempo até o próximo destino, chame timeToNextDestination().
Isso retorna um valor NSTimeInterval. O exemplo a seguir mostra
como registrar o tempo até o próximo destino:
Swift
ifletnavigator=mapView.navigator{lettime=navigator.timeToNextDestinationletminutes=floor(time/60)letseconds=round(time-minutes*60)NSLog("Time to next destination: %.0f:%.0f",minutes,seconds)}
Objective-C
NSTimeIntervaltime=_mapView.navigator.timeToNextDestination;intminutes=floor(time/60);intseconds=round(time-minutes*60);NSLog(@"%@",[NSStringstringWithFormat:@"Time to next destination: %i:%i.",minutes,seconds]);
Como saber a distância até o próximo destino
Para saber a distância até o próximo destino, chame distanceToNextDestination().
Isso retorna um valor CLLocationDistance. As unidades são especificadas em metros.
Swift
ifletnavigator=mapView.navigator{letdistance=navigator.distanceToNextDestinationletmiles=distance*0.00062137NSLog("Distance to next destination: %.2f miles.",miles)}
Objective-C
CLLocationDistancedistance=_mapView.navigator.distanceToNextDestination;doublemiles=distance*0.00062137;NSLog(@"%@",[NSStringstringWithFormat:@"Distance to next destination: %.2f.",miles]);
Condições de trânsito para o próximo destino
Para receber um valor indicando o fluxo de tráfego para o próximo destino, chame
delayCategoryToNextDestination.
Esse parâmetro retorna GMSNavigationDelayCategory. O exemplo a seguir
mostra como avaliar o resultado e registrar uma mensagem de tráfego:
Swift
ifletnavigator=mapView.navigator{// insert sample for evaluating traffic valueletdelay=navigator.delayCategoryToNextDestinationlettraffic="unavailable"switchdelay{case.noData:traffic="unavailable"case.heavy:traffic="heavy"case.medium:traffic="moderate"case.light:traffic="light"default:traffic="unavailable"}print("Traffic is \(traffic).")}
Objective-C
GMSNavigationDelayCategorydelay=mapView.navigator.delayCategoryToNextDestination;NSString*traffic=@"";switch(delayCategory){caseGMSNavigationDelayCategoryNoData:traffic=@"No Data";break;caseGMSNavigationDelayCategoryHeavy:traffic=@"Heavy";break;caseGMSNavigationDelayCategoryMedium:traffic=@"Medium";break;caseGMSNavigationDelayCategoryLight:traffic=@"Light";break;default:NSLog(@"Invalid delay category: %zd",delayCategory);}NSLog(@"%@",[NSStringstringWithFormat:@"Traffic is %@.",traffic]);
Como receber informações sobre o trecho atual
Para receber informações sobre o trecho atual da rota, chame currentRouteLeg.
Isso retorna uma instância GMSRouteLeg, em que você pode receber:
O destino da etapa.
A coordenada final do trecho.
O caminho que contém as coordenadas que compõem o trecho da rota.
O exemplo a seguir mostra como registrar o título e as coordenadas de lat/lng para o próximo trecho do trajeto:
Como conferir o caminho percorrido mais recentemente
Para conferir o caminho percorrido mais recentemente, chame
traveledPath.
Isso retorna uma instância de
GMSPath
simplificada para remover pontos redundantes (por exemplo,
transformando pontos colineares consecutivos em um único segmento de linha). Esse caminho fica
vazio até que a orientação seja iniciada. O exemplo a seguir mostra como acessar o caminho mais recente:
Swift
ifletnavigator=mapView.navigator{letlatestPath=navigator.traveledPathiflatestPath.count() > 0{letbegin:CLLocationCoordinate2D=latestPath.coordinate(at:0)letcurrent:CLLocationCoordinate2D=latestPath.coordinate(at:latestPath.count()-1)print("Path from (\(begin.latitude),\(begin.longitude)) to (\(current.latitude),\(current.longitude))")}}
Objective-C
GMSPath*latestPath=mapView.navigator.traveledPath;if(latestPath.count > 0){CLLocationCoordinate2Dbegin=[latestPathcoordinateAtIndex:0];CLLocationCoordinate2Dcurrent=[latestPathcoordinateAtIndex:latestPath.count-1];NSLog(@"Path from %f/%f to %f/%f",begin.latitude,begin.longitude,current.latitude,current.longitude);}
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2024-12-22 UTC."],[[["This guide explains how to retrieve real-time route information such as time, distance, and route legs using the Google Maps Navigation SDK for iOS."],["You can access properties like `timeToNextDestination`, `distanceToNextDestination`, and `currentRouteLeg` from the `navigator` instance to get route details."],["The `traveledPath` property provides a simplified path of the route already traveled."],["It is crucial to retrieve route leg information before calling `continueToNextDestination()`, as the navigator discards previous destination data afterward."],["Code samples in Swift and Objective-C demonstrate how to implement these functionalities within your application."]]],[]]