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
IOS苹果和百度地图的相关使用的更多相关文章
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...
- iOS之苹果和百度地图的使用
iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- iOS开发---集成百度地图完善版
一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...
- iOS开发---集成百度地图,位置偏移问题
iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图 ...
- iOS开发---集成百度地图
由于iOS MapKit框架很多情况并不能满足我们的需求,我们可以选择集成百度地图,那该如何操作呢? 申请Key 登录百度API管理中心申请Key http://lbsyun.baidu.com/ap ...
- 百度地图 javascript相关Bug搜集
一 在手机里用百度地图js版做webapp bug集合 1 之前用2.0版本的时候发现只要地图添加了覆盖物,无论数量多少,当地图放大到很小的范围时候,会卡死 1.1 当时处理办法:将版本降低至1. ...
- iOS开发之百度地图导航
本篇主要讲述百度地图的导航功能: 第一步:在使用百度导航之前,我们需要在百度地图开放平台上下载导航的 SDK,共85.8M,网速不好的同学可提前准备好. 第二步:引入导航所需的系统包 将AudioTo ...
- 网页百度地图API相关资料
百度地图API——网页URI接口.手机网页点击直接导航:js生成一个地图网页 或 直接跳转到百度导航界面 http://developer.baidu.com/map/index.php?title= ...
- 百度地图API相关点
百度API接口:http://developer.baidu.com/map/jsdemo.htm#a1_1 百度地图API具体解释之地图标注:http://www.cnblogs.com/jz110 ...
随机推荐
- Python之路【第十八章】:Django基础
Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...
- Issue 0:发刊词
最近读吴军博士的文章,很受感悟.知识的成体系地积累过程对一个人的素养提高很有帮助,所以打算开通这本电子期刊,以一周一篇文章的形式汇总今后的知识体系. 宗旨:及时和团队讨论,反馈:善于利用工具.时间越长 ...
- WIN8,开机启动 需要管理员权限的程序
1. 用WPF开发,需要管理员权限并开机启动,以写注册表的方式实现.仅写注册表只能启动一般权限的程序. 2. 考虑这样实现: 程序以一般权限启动,启动以后申请管理员权限. 实现: App类中重写OnS ...
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
我直接在父类的构造方法中调用了sessionj结果就报这个错误 搜了好久 让改web.config 可是不起作用 代码如下: public class BasePage:System.Web.UI.P ...
- CentOS 7 yum方式配置LAMP环境
环境:CentOS 7 最小化安装 采用Putty连接 方法:采用YUM安装方法 目的:搭建Apache+Mysql+PHP环境 1,安装Apache yum install httpd //默认情况 ...
- margin属性
可以设置position:absolute/relative/fixed,通过调节top/bottom/left/right实现元素的定位,这样很好,但是有时候想通过margin来实现. 下面是mar ...
- CentOS6.6安装vmware workstation报错
本人系统用的是centos6.6,安装了vmware workstation,启动后一直如下图报错,相关内核已经安装了的,哪位前辈如果解决过这样的问题,麻烦指点指点,小弟在此先谢过了.
- Python对时间的转换
1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 import time timeArray = time.strpt ...
- js 获取根目录 获取参数
function getRootPath() { //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp var curWwwPath ...
- NoSQL数据库笔谈(转)
NoSQL数据库笔谈 databases , appdir , node , paper颜开 , v0.2 , 2010.2 序 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 ...