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

一、苹果地图的使用

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

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

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

Tips:

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

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

定位代码如下:

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

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

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

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

  1. #import <MapKit/MapKit.h>
  2. #import <CoreLocation/CoreLocation.h>
  3. @interface MyViewController () <MKMapViewDelegate>
  4. @property (weak, nonatomic) IBOutlet MKMapView *mapView;
  5. @end
  6. @implementation MyViewController
  7. - (void)viewDidLoad
  8. {
  9. [super viewDidLoad];
  10. // 1.跟踪用户位置(显示用户的具体位置)
  11. self.mapView.userTrackingMode = MKUserTrackingModeFollow;
  12. // 2.设置地图类型
  13. self.mapView.mapType = MKMapTypeStandard;
  14. // 3.设置代理
  15. self.mapView.delegate = self;
  16. }
  17. #pragma mark - MKMapViewDelegate
  18. /**
  19. *  当用户的位置更新,就会调用
  20. *
  21. *  @param userLocation 表示地图上蓝色那颗大头针的数据
  22. */
  23. - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
  24. {
  25. userLocation.title = @"苍老师在这里";
  26. userLocation.subtitle = @"苍老师在这里,你知道吗?";
  27. CLLocationCoordinate2D center = userLocation.location.coordinate;
  28. NSLog(@"%f %f", center.latitude, center.longitude);
  29. // 设置地图的显示范围, 让其显示到当前指定的位置
  30. MKCoordinateSpan span = MKCoordinateSpanMake(0.021321, 0.019366);//这个显示大小精度自己调整
  31. MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
  32. [mapView setRegion:region animated:YES];
  33. }
  34. @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. // 添加对BMKMapManager的初始化,并填入您申请的授权Key
  3. BMKMapManager *mapManager = [[BMKMapManager alloc]init];
  4. // 如果要关注网络及授权验证事件,请设定generalDelegate参数
  5. BOOL ret = [mapManager start:@"你的授权key,自己改" generalDelegate:nil];
  6. if (!ret) {
  7. NSLog(@"地图管理器初始化失败!");
  8. }
  9. return YES;
  10. }

viewController中使用也很简单

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

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之苹果和百度地图的使用的更多相关文章

  1. IOS苹果和百度地图的相关使用

    iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...

  2. 【iOS】苹果,百度Map定位使用与总结

    iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).当中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...

  3. iOS开发之引用百度地图SDK(一)-----------SDK开发指南

    (void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...

  4. iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)

    本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...

  5. iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)

    [objc] view plaincopy  1. BOOL hasBaiduMap = NO;   2.         BOOL hasGaodeMap = NO;   3.            ...

  6. 关于ios 程序加载百度地图lib,出现链接错误:找不到符号 (null): _OBJC_CLASS_$_BMKMapManager的解决办法

    报告的错误信息 ld: warning: ignoring file /Users/5012/Documents/sphuang/IOS_project/baidu_map/ShareLocation ...

  7. iOS百度地图

    一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...

  8. 在iOS APP中使用H5显示百度地图时如何支持HTTPS?

    现象: 公司正在开发一个iOSAPP,使用h5显示百度地图,但是发现同样的H5页面,在安卓可以显示出来,在iOS中就显示不出来. 原因分析: 但是现在iOS开发中,苹果已经要求在APP中的所有对外连接 ...

  9. iOS 百度地图截屏

    关于百度地图截屏的问题,发现不能用常用的方法进行载屏,常用的截屏方法所得到的图片地图瓦片底图会显示空白,网上给出的答案是这样的 :因为百度地图不是用UIKit实现的,所以得不到截图! 不过通过Open ...

随机推荐

  1. vijosP1567子串计数

    描述现在有一个字符串,请求出这个字符串不相同的子串个数.YXY现在不会做,请你来帮忙…… n<=20W 题解: 后缀数组裸题,其实我在练习模板写对了没 代码: #include<cstdi ...

  2. LoadLibraryEx及发回hmodule的一些细节

    LoadLibraryEx可以配合 DONT_RESOLVE_DLL_REFERENCES LOAD_LIBRARY_AS_DATAFILE LOAD_LIBRARY_AS_DATAFILE_EXCL ...

  3. [BILL WEI]一些经常用到的SQL函数

    截取时间 --convert可以截取特点值 convert(varchar(10),getdate(),120) 截取2012-11-11 11:11:11 前10位,得到日期2012-11-11

  4. Codeforces Round #335 (Div. 2)B. Testing Robots解题报告

                                                                                               B. Testin ...

  5. Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告

    对于这道水题本人觉得应该应用贪心算法来解这道题: 下面就贴出本人的代码吧: #include<cstdio> #include<iostream> using namespac ...

  6. 使用 Visual Studio 分析器找出应用程序瓶颈(转)

    使用 Visual Studio 分析器找出应用程序瓶颈 Hari Pulapaka and Boris Vidolov 本文讨论: 以性能瓶颈为目标 应用程序代码分析 比较分析数据 性能报告 本文使 ...

  7. marvell笔试题(嵌入式软件)

    有幸去Marvell参加面试,由于其要求WCDMA/GSM之类的,我还特地恶补了下这方面的知识.后来坐了2个小时的地铁后,到达了Marvell.公司还蛮不错的,里面环境都还可以.我投了这家公司也是同学 ...

  8. 2013 ACM区域赛长沙 H zoj 3733 (hdu 4798) Skycity

    题意:一个圆台,底面和顶面半径分别为R,r,然后高度为H,一共F层,每层高度一样,然后要在每层的天花板上贴方格玻璃,方格玻璃要满足以下几个条件: 方格玻璃面积不能小于S,且方格玻璃要围成一个正多边形, ...

  9. Word恢复文本转换器-修复损坏的WORD文件

    第一步:找任意一个未损坏的文件打开word,新建的或者是已有的好的word文档,在文档的工具-选项-常规中,选中“打开时确认转换”复选框,并按确定. 第二步:点击word软件左上角的 文件-打开,找到 ...

  10. 删除旧Ambari集群

    年少无知,安装了1.2.0版本.开源社区动力太强,更新的吼吼的跟不上啊,升级发生错误,于是就想重装了.在网上找到了一个很好的删除脚本,分享一下.原文链接 http://www.cnblogs.com/ ...