iOS之苹果和百度地图的使用
iOS中使用较多的3款地图,google地图、百度地图、苹果自带地图(高德)。其中苹果自带地图在中国使用的是高德的数据。苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图。在国内使用的较多的就是百度、苹果自带地图(高德),以下总结下这两个。
一、苹果地图的使用
因为苹果使用的是高德的地图,加上苹果做的一些封装,使用起来也非常方便。不需要引入第三方框架,相比较之下,使用百度地图SDK会使源码与程序都 大10M多,这点很蛋疼。同时由于苹果使用的是高德,不会像谷歌地图一样在国内乌龟一样的访问速度,确实做一些地图相关的东西,非常有吸引力。
主要用到系统的两个框架:CoreLocation与MapKit。
1、CoreLocation实现定位 (没有UI的,只是负责一些数据)
Tips:
需要CLLocationManager定位管理器来管理定位。(开启与结束等)
使用模拟器时,需要设置经纬度:调试--》位置--》自定义位置 输入经纬度即可。(北京:北纬39.9”,东经116. 3”)
定位代码如下:
- #import <CoreLocation/CoreLocation.h>
- @interface MyViewController () <CLLocationManagerDelegate>
- @property (nonatomic, strong) CLLocationManager *locMgr;
- @end
- @implementation MyViewController
- - (CLLocationManager *)locMgr
- {
- #warning 定位服务不可用
- if(![CLLocationManager locationServicesEnabled]) return nil;
- if (!_locMgr) {
- // 创建定位管理者
- self.locMgr = [[CLLocationManager alloc] init];
- // 设置代理
- self.locMgr.delegate = self;
- }
- return _locMgr;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // 开始定位用户的位置
- [self.locMgr startUpdatingLocation];
- }
- #pragma mark - CLLocationManagerDelegate
- /**
- * 只要定位到用户的位置,就会调用(调用频率特别高)
- * @param locations : 装着CLLocation对象
- */
- - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- {
- //CLLocation中存放的是一些经纬度, 速度等信息. 要获取地理位置需要转换做地理位置编码.
- // 1.取出位置对象
- CLLocation *loc = [locations firstObject];
- NSLog(@"CLLocation----%@",loc);
- // 2.取出经纬度
- CLLocationCoordinate2D coordinate = loc.coordinate;
- // 3.打印经纬度
- NSLog(@"didUpdateLocations------%f %f", coordinate.latitude, coordinate.longitude);
- // 停止定位(省电措施:只要不想用定位服务,就马上停止定位服务)
- [manager stopUpdatingLocation];
- }
- @end
用CoreLocation还能实现:地理信息编码、反编码、经纬度间距离计算等。
2、MapKit上实现定位(有UI的,可以标记大头针、显示文字等)
MapView就是苹果自带的地图控件,拖控件或手码创建都行。
- #import <MapKit/MapKit.h>
- #import <CoreLocation/CoreLocation.h>
- @interface MyViewController () <MKMapViewDelegate>
- @property (weak, nonatomic) IBOutlet MKMapView *mapView;
- @end
- @implementation MyViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // 1.跟踪用户位置(显示用户的具体位置)
- self.mapView.userTrackingMode = MKUserTrackingModeFollow;
- // 2.设置地图类型
- self.mapView.mapType = MKMapTypeStandard;
- // 3.设置代理
- self.mapView.delegate = self;
- }
- #pragma mark - MKMapViewDelegate
- /**
- * 当用户的位置更新,就会调用
- *
- * @param userLocation 表示地图上蓝色那颗大头针的数据
- */
- - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
- {
- userLocation.title = @"苍老师在这里";
- userLocation.subtitle = @"苍老师在这里,你知道吗?";
- CLLocationCoordinate2D center = userLocation.location.coordinate;
- NSLog(@"%f %f", center.latitude, center.longitude);
- // 设置地图的显示范围, 让其显示到当前指定的位置
- MKCoordinateSpan span = MKCoordinateSpanMake(0.021321, 0.019366);//这个显示大小精度自己调整
- MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
- [mapView setRegion:region animated:YES];
- }
- @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给的代码都切开的。
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- // 添加对BMKMapManager的初始化,并填入您申请的授权Key
- BMKMapManager *mapManager = [[BMKMapManager alloc]init];
- // 如果要关注网络及授权验证事件,请设定generalDelegate参数
- BOOL ret = [mapManager start:@"你的授权key,自己改" generalDelegate:nil];
- if (!ret) {
- NSLog(@"地图管理器初始化失败!");
- }
- return YES;
- }
viewController中使用也很简单
- #import "BMKMapManager.h"
- #import "BMKMapView.h"
- @interface XNViewController ()
- {
- BMKMapView *_mapView;
- }
- @end
- @implementation XNViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- _mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(55, 100, 200, 200)];
- [self.view addSubview:_mapView];
- }
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中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- 【iOS】苹果,百度Map定位使用与总结
iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).当中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- iOS开发之引用百度地图SDK(一)-----------SDK开发指南
(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...
- iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)
本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...
- iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)
[objc] view plaincopy 1. BOOL hasBaiduMap = NO; 2. BOOL hasGaodeMap = NO; 3. ...
- 关于ios 程序加载百度地图lib,出现链接错误:找不到符号 (null): _OBJC_CLASS_$_BMKMapManager的解决办法
报告的错误信息 ld: warning: ignoring file /Users/5012/Documents/sphuang/IOS_project/baidu_map/ShareLocation ...
- iOS百度地图
一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...
- 在iOS APP中使用H5显示百度地图时如何支持HTTPS?
现象: 公司正在开发一个iOSAPP,使用h5显示百度地图,但是发现同样的H5页面,在安卓可以显示出来,在iOS中就显示不出来. 原因分析: 但是现在iOS开发中,苹果已经要求在APP中的所有对外连接 ...
- iOS 百度地图截屏
关于百度地图截屏的问题,发现不能用常用的方法进行载屏,常用的截屏方法所得到的图片地图瓦片底图会显示空白,网上给出的答案是这样的 :因为百度地图不是用UIKit实现的,所以得不到截图! 不过通过Open ...
随机推荐
- C++中的类所占内存空间总结
C++中的类所占内存空间总结 最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看! 类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算 ...
- java里的静态变量是放在了堆内存还是栈内存?
堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对 ...
- 分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)
http://www.cocoachina.com/ios/20151231/14846.html 笔者分享总结如下(本篇会不定期进行更新) : Objective-C 1.让Xcode的控制台支持L ...
- Mac常用目录
服务存放目录: ~/Library/Services/ Xcode代码片段目录 ~/Library/Developer/Xcode/UserData/CodeSnippets
- javascript 中concat与push的区别
1. push 遇到数组参数时,把整个数组参数作为一个元素:而 concat 则是拆开数组参数,一个元素一个元素地加进去. 2. push 直接改变当前数组:concat 不改变当前数组. 总结:如果 ...
- 兼容ie\firefox\chrome的cursor
cursor:hand 与 cursor:pointer 的效果是一样,都像手形光标. 但用FireFox浏览时才注意到使用cursor:hand在FireFox.chorme里并被支持.cursor ...
- 使用Chrome测试页面响应性
如今我们都知道 响应式 的意思.作为开发者,我们常常开发一些响应式的应用.有很多工具可以帮助我们完成这个目的.某些人甚至使用付费扩展.然而,我用了一个东西,它就是 Google Chrome 浏览器. ...
- HUFFMAN 树
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN) 树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码. 首先介绍什么 ...
- (4)I2C总线的7bit从机地址
时钟拉伸(Clock stretching)clock stretching通过将SCL线拉低来暂停一个传输.直到释放SCL线为高电平,传输才继续进行.clock stretching是可选的,实际上 ...
- codeforce 621B Wet Shark and Bishops
对角线 x1+y1=x2+y2 或者x1-y1=x2-y2 #include<iostream> #include<string> #include<algorithm& ...