iOS开发系列--地图与定位源代码详解

2020-01-18 17:38:32王振洲

运行效果:
ios开发地图定位,ios自带地图定位开发,ios开发百度地图定位

地图导航

要使用地图导航功能在自带地图应用中相当简单,只要设置参数配置导航模式即可,例如在上面代码基础上设置驾驶模式,则地图应用会启动驾驶模式计算两点之间的距离同时对路线进行规划。


//
// KCMainViewController.m
// AppleMap
//
// Created by Kenshin Cui on 14/3/27.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import "KCMainViewController.h"
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

@interface KCMainViewController ()
@property (nonatomic,strong) CLGeocoder *geocoder;
@end

@implementation KCMainViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  _geocoder=[[CLGeocoder alloc]init];
  
  [self turnByTurn];
}

-(void)turnByTurn{
  //根据“北京市”地理编码
  [_geocoder geocodeAddressString:@"北京市" completionHandler:^(NSArray *placemarks, NSError *error) {
    CLPlacemark *clPlacemark1=[placemarks firstObject];//获取第一个地标
    MKPlacemark *mkPlacemark1=[[MKPlacemark alloc]initWithPlacemark:clPlacemark1];
    //注意地理编码一次只能定位到一个位置,不能同时定位,所在放到第一个位置定位完成回调函数中再次定位
    [_geocoder geocodeAddressString:@"郑州市" completionHandler:^(NSArray *placemarks, NSError *error) {
      CLPlacemark *clPlacemark2=[placemarks firstObject];//获取第一个地标
      MKPlacemark *mkPlacemark2=[[MKPlacemark alloc]initWithPlacemark:clPlacemark2];
      NSDictionary *options=@{MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard),MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving};
      //MKMapItem *mapItem1=[MKMapItem mapItemForCurrentLocation];//当前位置
      MKMapItem *mapItem1=[[MKMapItem alloc]initWithPlacemark:mkPlacemark1];
      MKMapItem *mapItem2=[[MKMapItem alloc]initWithPlacemark:mkPlacemark2];
      [MKMapItem openMapsWithItems:@[mapItem1,mapItem2] launchOptions:options];
      
    }];
    
  }];
}
@end

运行效果:
ios开发地图定位,ios自带地图定位开发,ios开发百度地图定位
注意:其实如果不用苹果自带的地图应用也可以实现地图导航,MapKit中提供了MKDirectionRequest对象用于计算路线,提供了MKDirections用于计算方向,这样一来只需要调用MKMapView的addOverlay等方法添加覆盖物即可实现类似的效果,有兴趣的朋友可以试一下。

由于定位和地图框架中用到了诸多类,有些初学者容易混淆,下面简单对比一下。

CLLocation:用于表示位置信息,包含地理坐标、海拔等信息,包含在CoreLoaction框架中。