ios之苹果和百度地图的使用

Posted 仗剑走天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios之苹果和百度地图的使用相关的知识,希望对你有一定的参考价值。

iOS中使用较多的3款地图,google地图、百度地图、苹果自带地图(高德)。其中苹果自带地图在中国使用的是高德的数据。苹果在ios 6之后放弃了使用谷歌地图,而改用自家的地图。在国内使用的较多的就是百度、苹果自带地图(高德),以下总结下这两个。

一、苹果地图的使用

因为苹果使用的是高德的地图,加上苹果做的一些封装,使用起来也非常方便。不需要引入第三方框架,相比较之下,使用百度地图SDK会使源码与程序都 大10M多,这点很蛋疼。同时由于苹果使用的是高德,不会像谷歌地图一样在国内乌龟一样的访问速度,确实做一些地图相关的东西,非常有吸引力。

主要用到系统的两个框架:CoreLocation与MapKit。

1、CoreLocation实现定位  (没有UI的,只是负责一些数据)

Tips:

需要CLLocationManager定位管理器来管理定位。(开启与结束等)

使用模拟器时,需要设置经纬度:调试--》位置--》自定义位置   输入经纬度即可。(北京:北纬39.9”,东经116. 3”

定位代码如下:

 

  1. #import <CoreLocation/CoreLocation.h>  
  2.   
  3. @interface MyViewController () <CLLocationManagerDelegate>  
  4. @property (nonatomic, strong) CLLocationManager *locMgr;  
  5. @end  
  6.   
  7. @implementation MyViewController  
  8.   
  9. - (CLLocationManager *)locMgr  
  10. {  
  11. #warning 定位服务不可用  
  12.     if(![CLLocationManager locationServicesEnabled]) return nil;  
  13.       
  14.     if (!_locMgr) {  
  15.         // 创建定位管理者  
  16.         self.locMgr = [[CLLocationManager alloc] init];  
  17.         // 设置代理  
  18.         self.locMgr.delegate = self;  
  19.     }  
  20.     return _locMgr;  
  21. }  
  22.   
  23. - (void)viewDidLoad  
  24. {  
  25.     [super viewDidLoad];  
  26.       
  27.     // 开始定位用户的位置  
  28.     [self.locMgr startUpdatingLocation];  
  29.       
  30. }  
  31.   
  32. #pragma mark - CLLocationManagerDelegate  
  33. /** 
  34.  *  只要定位到用户的位置,就会调用(调用频率特别高) 
  35.  *  @param locations : 装着CLLocation对象 
  36.  */  
  37. - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations  
  38. {  
  39.     //CLLocation中存放的是一些经纬度, 速度等信息. 要获取地理位置需要转换做地理位置编码.  
  40.     // 1.取出位置对象  
  41.     CLLocation *loc = [locations firstObject];  
  42.       
  43.     NSLog(@"CLLocation----%@",loc);  
  44.       
  45.     // 2.取出经纬度  
  46.     CLLocationCoordinate2D coordinate = loc.coordinate;  
  47.       
  48.     // 3.打印经纬度  
  49.     NSLog(@"didUpdateLocations------%f %f", coordinate.latitude, coordinate.longitude);  
  50.       
  51.     // 停止定位(省电措施:只要不想用定位服务,就马上停止定位服务)  
  52.     [manager stopUpdatingLocation];  
  53. }  
  54. @end  

用CoreLocation还能实现:地理信息编码、反编码、经纬度间距离计算等。


2、MapKit上实现定位(有UI的,可以标记大头针、显示文字等)

MapView就是苹果自带的地图控件,拖控件或手码创建都行。

  1. #import <MapKit/MapKit.h>  
  2. #import <CoreLocation/CoreLocation.h>  
  3.   
  4. @interface MyViewController () <MKMapViewDelegate>  
  5. @property (weak, nonatomic) IBOutlet MKMapView *mapView;  
  6. @end  
  7.   
  8. @implementation MyViewController  
  9.   
  10. - (void)viewDidLoad  
  11. {  
  12.     [super viewDidLoad];  
  13.       
  14.     // 1.跟踪用户位置(显示用户的具体位置)  
  15.     self.mapView.userTrackingMode = MKUserTrackingModeFollow;  
  16.       
  17.     // 2.设置地图类型  
  18.     self.mapView.mapType = MKMapTypeStandard;  
  19.       
  20.     // 3.设置代理  
  21.     self.mapView.delegate = self;  
  22. }  
  23.   
  24. #pragma mark - MKMapViewDelegate  
  25. /** 
  26.  *  当用户的位置更新,就会调用 
  27.  * 
  28.  *  @param userLocation 表示地图上蓝色那颗大头针的数据 
  29.  */  
  30. - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation  
  31. {  
  32.     userLocation.title = @"苍老师在这里";  
  33.     userLocation.subtitle = @"苍老师在这里,你知道吗?";  
  34.       
  35.     CLLocationCoordinate2D center = userLocation.location.coordinate;  
  36.     NSLog(@"%f %f", center.latitude, center.longitude);  
  37.   
  38.     // 设置地图的显示范围, 让其显示到当前指定的位置  
  39.     MKCoordinateSpan span = MKCoordinateSpanMake(0.021321, 0.019366);//这个显示大小精度自己调整  
  40.     MKCoordinateRegion region = MKCoordinateRegionMake(center, span);  
  41.     [mapView setRegion:region animated:YES];  
  42. }  
  43. @end  

MapView中还能设置大头针,自定义大头针等,很多细节的功能。


二、百度地图的使用

百度给的一个Hello World。凑活看吧。只是实现了显示一个百度地图的view。需要引入一堆框架,如果是模拟器真机换来换去,还得切换静态库。(调试的话最好合并一下,且库有10M多)

http://developer.baidu.com/map/wiki/index.php?title=iossdk/guide/hellobaidumap

Tips:

需要到百度网站上申请key,且使用模拟器来定位的话,本人测试无反应(用百度给的demo)。。。。。。 建议使用真机!

百度地图使用的是Objective-C++,这意味这必须要有一个.mm文件。

可以根据功能来下载,这样可适当减少SDK的大小。

百度给了各个功能的示例代码,看着还是有些蛋蛋疼的,文件太多。http://developer.baidu.com/map/sdkiosdev-download.htm 

1、添加百度地图的View

在delegate中didFinishLaunching中加入这段代码就行,百度Hello World给的代码都切开的。

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.       
  3.     // 添加对BMKMapManager的初始化,并填入您申请的授权Key  
  4.     BMKMapManager *mapManager = [[BMKMapManager alloc]init];  
  5.     // 如果要关注网络及授权验证事件,请设定generalDelegate参数  
  6.     BOOL ret = [mapManager start:@"你的授权key,自己改" generalDelegate:nil];  
  7.     if (!ret) {  
  8.         NSLog(@"地图管理器初始化失败!");  
  9.     }  
  10.   
  11.     return YES;  
  12. }  

viewController中使用也很简单

  1. #import "BMKMapManager.h"  
  2. #import "BMKMapView.h"  
  3.   
  4. @interface XNViewController ()  
  5. {  
  6.     BMKMapView *_mapView;  
  7. }  
  8. @end  
  9.   
  10. @implementation XNViewController  
  11.   
  12. - (void)viewDidLoad {  
  13.     [super viewDidLoad];  
  14.   
  15.     _mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(55, 100, 200, 200)];  
  16.     [self.view addSubview:_mapView];  
  17. }  


2、使用百度地图定位

百度的东西还是看他自己给的demo吧,BaiduMap_IOSSDK_v2.3.0_Sample 项目里面的LocationDemoViewController类。

Tips: 

用到了BMKLocationService

用法和苹果地图的有很多相似之处,很easy。

这里就不写了。



百度地图还可以实现:路径规划、云检索、路径规划、公交线路查询等,功能还是相当丰富的。


相关资料:

http://blog.csdn.net/totogo2010/article/details/7701026

http://www.cnblogs.com/syxchina/archive/2012/10/14/2723522.html

http://developer.baidu.com/map/sdk-ios.htm

查阅apple官方文档:CoreLocation,MapView


关于定位的原理:http://www.2cto.com/kf/201404/289744.html

以上是关于ios之苹果和百度地图的使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS应用内跳转百度高德苹果地图

如何自定义百度地图的定位图标 ios

苹果升级到iOS10后使用高德地图导航一直提示GPS信号弱,这样怎么解决?

如何使用我的 ios 应用程序中的路线打开苹果地图应用程序

iOS App内部调起百度地图、高德地图、腾讯地图

在 ios 8 及更高版本上打开苹果地图不起作用