==> Here to Finding Rout Direction Between Source And Destination :;
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
=> Here Some Prortocol confirm LIke MKMapVIewDelegate:
=> And Also Use CLLocationManager Used For Location:
@interface ViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
{
CLLocationManager *clMngr;
IBOutlet MKMapView *mpView;
CLLocationCoordinate2D sourceCord;
CLLocationCoordinate2D destCord;
MKPinAnnotationView *pinAnnView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Keys to add in info.plist for iOS 8
==> Some Use d For UserSide Asking Permission Is Accessd Current Location:
// NSLocationWhenInUseUsageDescription
// NSLocationAlwaysUsageDescription
clMngr = [[CLLocationManager alloc] init];
clMngr.delegate = self;
clMngr.desiredAccuracy = 1.0;
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
if ([clMngr respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[clMngr requestWhenInUseAuthorization];
}
[clMngr startUpdatingLocation];
mpView.showsUserLocation = YES;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
== Here some Used Source And Destination Cordinate And Location Of Cordinateing of Location Manger:
sourceCord = clMngr.location.coordinate;
destCord = CLLocationCoordinate2DMake(37.0000, -120.0000);
}
- (void)viewDidAppear:(BOOL)animated
{
[self makeMapInCenter];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
==> Some MKMapView Delegate For Method And Action Used For Like MapView:
#pragma mark ----------------------
#pragma mark MKMapView Delegate Methods
- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView
{
NSLog(@"%s",__FUNCTION__);
}
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
NSLog(@"%s",__FUNCTION__);
[self addDestinationAnnotation];
}
==> Used And Viewing Annotation In MapView For Displaying Anp Anotation:-
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"%s",__FUNCTION__);
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
if (pinAnnView) {
return pinAnnView;
}
==> Here Set PinAnotationView for Falling Pin Current Or Destination Source In MKMapView:
NSString *aStrId = @"destination";
pinAnnView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:aStrId];
if (!pinAnnView) {
pinAnnView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:aStrId];
}
// pinAnnView.animatesDrop = YES;
pinAnnView.canShowCallout = YES;
pinAnnView.pinColor = MKPinAnnotationColorRed;
return pinAnnView;
}
// For OverLay
==> For Overlay And Useing render For Overlay Map Route:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
@try {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineRenderer *aPolyLineRenderer = [[MKPolylineRenderer alloc] initWithPolyline:(MKPolyline *)overlay];
aPolyLineRenderer.strokeColor = [UIColor greenColor];
aPolyLineRenderer.lineWidth = 5.0;
return aPolyLineRenderer;
}
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
==> Continuews Updted UserLocation in MKMapVIew:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
[self getTheDirections];
}
==> CLLocation Manager Delegate Use For Accesing CLLocationManager And DidiUpdated User loction:-
#pragma mark ----------------------
#pragma mark Cllocation Manager Delegate Methods
// Location Manager Delegate Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// NSLog(@"%s",__FUNCTION__);
// NSLog(@"%@", [locations lastObject]);
}
==> Some Method used For User Defin Method And to Make Map in Center Possition In Displaying In MkMapView:
#pragma mark ----------------------
#pragma mark User Define Methods
- (void)makeMapInCenter
{
CLLocationCoordinate2D currentCord = clMngr.location.coordinate;
MKCoordinateRegion reg = MKCoordinateRegionMakeWithDistance(currentCord, 10000, 10000);
[mpView setRegion:reg];
}
- (void)addDestinationAnnotation
{
@try {
MKPointAnnotation *ann = [[MKPointAnnotation alloc] init];
ann.coordinate = destCord;
ann.title = @"California";
ann.subtitle = @"Destination";
[mpView addAnnotation:ann];
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
// Get the directions for the mapView
=> Using This method and Action For Getting Direction of Source and Destination:
- (void)getTheDirections
{
@try {
MKPlacemark *aPlcSource = [[MKPlacemark alloc] initWithCoordinate:clMngr.location.coordinate addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil]];
MKPlacemark *aPlcDest = [[MKPlacemark alloc] initWithCoordinate:destCord addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil]];
MKMapItem *mpItemSource = [[MKMapItem alloc] initWithPlacemark:aPlcSource];
[mpItemSource setName:@"Source"];
MKMapItem *mpItemDest = [[MKMapItem alloc] initWithPlacemark:aPlcDest];
[mpItemDest setName:@"Dest"];
MKDirectionsRequest *aDirectReq = [[MKDirectionsRequest alloc] init];
[aDirectReq setSource:mpItemSource];
[aDirectReq setDestination:mpItemDest];
[aDirectReq setTransportType:MKDirectionsTransportTypeAutomobile];
MKDirections *aDirections = [[MKDirections alloc] initWithRequest:aDirectReq];
[aDirections calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (error) {
NSLog(@"Error :: %@",error);
}
else{
NSArray *aArrRoutes = [response routes];
NSLog(@"Routes :: %@",aArrRoutes);
[mpView removeOverlays:mpView.overlays];
[aArrRoutes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MKRoute *aRoute = obj;
[mpView addOverlay:aRoute.polyline];
NSLog(@"Rout Name : %@",aRoute.name);
NSLog(@"Total Distance (in Meters) :%f",aRoute.distance);
NSArray *aArrSteps = [aRoute steps];
NSLog(@"Total Steps : %lu",(unsigned long)[aArrSteps count]);
[aArrSteps enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Rout Instruction : %@",[obj instructions]);
NSLog(@"Rout Distance : %f",[obj distance]);
}];
}];
}
}];
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
@end
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
=> Here Some Prortocol confirm LIke MKMapVIewDelegate:
=> And Also Use CLLocationManager Used For Location:
@interface ViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
{
CLLocationManager *clMngr;
IBOutlet MKMapView *mpView;
CLLocationCoordinate2D sourceCord;
CLLocationCoordinate2D destCord;
MKPinAnnotationView *pinAnnView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Keys to add in info.plist for iOS 8
==> Some Use d For UserSide Asking Permission Is Accessd Current Location:
// NSLocationWhenInUseUsageDescription
// NSLocationAlwaysUsageDescription
clMngr = [[CLLocationManager alloc] init];
clMngr.delegate = self;
clMngr.desiredAccuracy = 1.0;
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
if ([clMngr respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[clMngr requestWhenInUseAuthorization];
}
[clMngr startUpdatingLocation];
mpView.showsUserLocation = YES;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
== Here some Used Source And Destination Cordinate And Location Of Cordinateing of Location Manger:
sourceCord = clMngr.location.coordinate;
destCord = CLLocationCoordinate2DMake(37.0000, -120.0000);
}
- (void)viewDidAppear:(BOOL)animated
{
[self makeMapInCenter];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
==> Some MKMapView Delegate For Method And Action Used For Like MapView:
#pragma mark ----------------------
#pragma mark MKMapView Delegate Methods
- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView
{
NSLog(@"%s",__FUNCTION__);
}
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
NSLog(@"%s",__FUNCTION__);
[self addDestinationAnnotation];
}
==> Used And Viewing Annotation In MapView For Displaying Anp Anotation:-
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"%s",__FUNCTION__);
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
if (pinAnnView) {
return pinAnnView;
}
==> Here Set PinAnotationView for Falling Pin Current Or Destination Source In MKMapView:
NSString *aStrId = @"destination";
pinAnnView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:aStrId];
if (!pinAnnView) {
pinAnnView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:aStrId];
}
// pinAnnView.animatesDrop = YES;
pinAnnView.canShowCallout = YES;
pinAnnView.pinColor = MKPinAnnotationColorRed;
return pinAnnView;
}
// For OverLay
==> For Overlay And Useing render For Overlay Map Route:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
@try {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineRenderer *aPolyLineRenderer = [[MKPolylineRenderer alloc] initWithPolyline:(MKPolyline *)overlay];
aPolyLineRenderer.strokeColor = [UIColor greenColor];
aPolyLineRenderer.lineWidth = 5.0;
return aPolyLineRenderer;
}
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
==> Continuews Updted UserLocation in MKMapVIew:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
[self getTheDirections];
}
==> CLLocation Manager Delegate Use For Accesing CLLocationManager And DidiUpdated User loction:-
#pragma mark ----------------------
#pragma mark Cllocation Manager Delegate Methods
// Location Manager Delegate Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// NSLog(@"%s",__FUNCTION__);
// NSLog(@"%@", [locations lastObject]);
}
==> Some Method used For User Defin Method And to Make Map in Center Possition In Displaying In MkMapView:
#pragma mark ----------------------
#pragma mark User Define Methods
- (void)makeMapInCenter
{
CLLocationCoordinate2D currentCord = clMngr.location.coordinate;
MKCoordinateRegion reg = MKCoordinateRegionMakeWithDistance(currentCord, 10000, 10000);
[mpView setRegion:reg];
}
- (void)addDestinationAnnotation
{
@try {
MKPointAnnotation *ann = [[MKPointAnnotation alloc] init];
ann.coordinate = destCord;
ann.title = @"California";
ann.subtitle = @"Destination";
[mpView addAnnotation:ann];
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
// Get the directions for the mapView
=> Using This method and Action For Getting Direction of Source and Destination:
- (void)getTheDirections
{
@try {
MKPlacemark *aPlcSource = [[MKPlacemark alloc] initWithCoordinate:clMngr.location.coordinate addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil]];
MKPlacemark *aPlcDest = [[MKPlacemark alloc] initWithCoordinate:destCord addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil]];
MKMapItem *mpItemSource = [[MKMapItem alloc] initWithPlacemark:aPlcSource];
[mpItemSource setName:@"Source"];
MKMapItem *mpItemDest = [[MKMapItem alloc] initWithPlacemark:aPlcDest];
[mpItemDest setName:@"Dest"];
MKDirectionsRequest *aDirectReq = [[MKDirectionsRequest alloc] init];
[aDirectReq setSource:mpItemSource];
[aDirectReq setDestination:mpItemDest];
[aDirectReq setTransportType:MKDirectionsTransportTypeAutomobile];
MKDirections *aDirections = [[MKDirections alloc] initWithRequest:aDirectReq];
[aDirections calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (error) {
NSLog(@"Error :: %@",error);
}
else{
NSArray *aArrRoutes = [response routes];
NSLog(@"Routes :: %@",aArrRoutes);
[mpView removeOverlays:mpView.overlays];
[aArrRoutes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MKRoute *aRoute = obj;
[mpView addOverlay:aRoute.polyline];
NSLog(@"Rout Name : %@",aRoute.name);
NSLog(@"Total Distance (in Meters) :%f",aRoute.distance);
NSArray *aArrSteps = [aRoute steps];
NSLog(@"Total Steps : %lu",(unsigned long)[aArrSteps count]);
[aArrSteps enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Rout Instruction : %@",[obj instructions]);
NSLog(@"Rout Distance : %f",[obj distance]);
}];
}];
}
}];
}
@catch (NSException *exception) {
NSLog(@"Method :: %s Exception :: %@",__FUNCTION__,exception.description);
}
@finally {
}
}
@end