نمایش/پنهان کردن کد سوئیفت برای دریافت اطلاعات مسیر.
/**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)}}
نمایش/مخفی کردن کد Objective-C برای دریافت اطلاعات مسیر.
/* * 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
زمان رسیدن به مقصد بعدی
برای دریافت زمان تا مقصد بعدی، تابع timeToNextDestination() را فراخوانی کنید. این تابع یک مقدار NSTimeInterval را برمیگرداند. مثال زیر ثبت زمان تا مقصد بعدی را نشان میدهد:
سویفت
ifletnavigator=mapView.navigator{lettime=navigator.timeToNextDestinationletminutes=floor(time/60)letseconds=round(time-minutes*60)NSLog("Time to next destination: %.0f:%.0f",minutes,seconds)}
هدف-سی
NSTimeIntervaltime=_mapView.navigator.timeToNextDestination;intminutes=floor(time/60);intseconds=round(time-minutes*60);NSLog(@"%@",[NSStringstringWithFormat:@"Time to next destination: %i:%i.",minutes,seconds]);
فاصله گرفتن تا مقصد بعدی
برای بدست آوردن فاصله تا مقصد بعدی، تابع distanceToNextDestination() را فراخوانی کنید. این تابع یک مقدار CLLocationDistance برمیگرداند. واحدها بر حسب متر مشخص میشوند.
سویفت
ifletnavigator=mapView.navigator{letdistance=navigator.distanceToNextDestinationletmiles=distance*0.00062137NSLog("Distance to next destination: %.2f miles.",miles)}
هدف-سی
CLLocationDistancedistance=_mapView.navigator.distanceToNextDestination;doublemiles=distance*0.00062137;NSLog(@"%@",[NSStringstringWithFormat:@"Distance to next destination: %.2f.",miles]);
دریافت شرایط ترافیکی به مقصد بعدی
برای دریافت مقداری که نشاندهندهی جریان ترافیک به مقصد بعدی است، تابع delayCategoryToNextDestination را فراخوانی کنید. این پارامتر GMSNavigationDelayCategory را برمیگرداند. مثال زیر ارزیابی نتیجه و ثبت یک پیام ترافیک را نشان میدهد:
سویفت
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).")}
هدف-سی
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]);
دریافت اطلاعات در مورد پای فعلی
برای دریافت اطلاعات مربوط به شاخهی مسیر فعلی، currentRouteLeg را فراخوانی کنید. این یک نمونه GMSRouteLeg را برمیگرداند که میتوانید از آن موارد زیر را دریافت کنید:
مقصد برای پا.
مختصات نهایی در پا.
مسیری که شامل مختصاتی است که بخش مسیر را تشکیل میدهند.
مثال زیر ثبت عنوان و مختصات lat/lng را برای بخش بعدی مسیر نشان میدهد:
برای دریافت آخرین مسیر طی شده، تابع traveledPath را فراخوانی کنید. این تابع یک نمونه GMSPath را برمیگرداند که برای حذف نقاط اضافی سادهسازی شده است (برای مثال، تبدیل نقاط همخط متوالی به یک پاره خط). این مسیر تا زمان شروع هدایت، خالی است. مثال زیر دریافت آخرین مسیر طی شده را نشان میدهد:
سویفت
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))")}}
هدف-سی
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);}