【iOS】苹果,百度Map定位使用与总结
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中使用也非常easy
#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
转载请注明出处:http://blog.csdn.net/xn4545945
【iOS】苹果,百度Map定位使用与总结的更多相关文章
- iOS学习之Map,定位,标记位置的使用
iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single V ...
- ios调用百度地图定位遇到的奇葩问题
app项目过程中需要用到百度地图,然后网上可以查资料看官网文档,最后弄了好几天还是不行,找了各位前辈帮忙虽然解决了,但是把代码拷贝到我的项目时又无法定位了,最后查看了下原因是info配置出了问题,不是 ...
- ios 苹果原生系统定位 CLLocationManager
首先要干这些事 下面的方法亲测可用 ------------------------------------------------------------ DNLogFUNC //初始化位置管理对象 ...
- xcode6和ios 8 百度无法定位解决
. @interface里: CLLocationManager *locationManager; . 初始化: locationManager = [[CLLocationManager allo ...
- IOS苹果和百度地图的相关使用
iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- H5结合百度map实现GPS定位
前言 目前我们做m端时都会用到定位,当用户第一次打开h5页面时会启动gps定位,并结合百度map来查找城市.按照我们的逻辑思路就是gps定位获取经纬度,传到后台调用百度的一个接口查找城市名称. 1.查 ...
- 手机版的百度map封装,使用gps定位
代码如下,包自己引 包参考 一个百度MAP导航的基础封装 使用的是浏览器调用gps定位 修改了标注的大小 效果如图: 代码...... <!DOCTYPE html> <html&g ...
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...
- Android 百度地图定位(手动+自动) 安卓开发教程
近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置. 经过2天研究 ...
随机推荐
- 4部门明确软件IC产业企业所得税优惠政策
中国证券网讯 据财政部5月9日消息,财政部.国家税务总局.发展改革委.工业和信息化部联合发布关于软件和集成电路产业企业所得税优惠政策有关问题的通知.该通知自2015年1月1日起执行. 通知指出,按照& ...
- WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
原文:WCF技术剖析之十三:序列化过程中的已知类型(Known Type) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话) ...
- DOM querySelector选择器
原生的强大DOM选择器querySelector 在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并 ...
- Swift - 后台获取数据(Background Fetch)的实现
前面讲了如何让程序申请后台短时运行.但这个额外延长的时间毕竟有限.所以从iOS7起又引入两种在后台运行任务的方式:后台获取和后台通知. 1,后台获取介绍 后台获取(Background Fetch)是 ...
- Eclipse用法和技巧十一:分栏显示
在编码的时候,有时候需要同时看到两个文件的代码.或者在代码走读的时候,能同时看到两个文件的代码能加快我们对代码的理解.来看看如何在eclipse中同时显示两个文件的代码. 步骤一:拖住一 ...
- overflow:hidden与position:absolute
在做一个下拉框的动画效果中遇到了这个bug,记录一下. 在写下拉框的动画的时候,一般我们的做法都是把下拉框的外盒子设为overflow:hidden,然后设下外层盒子高度,之后通过js慢慢的改变高度从 ...
- axure网格设置
Axure默认的界面是没有吧网格显示出来,没有网格在制作原型的时候,对齐方面不是很好,个人习惯还是把网格显示出来,便于组件对齐和布局. 其实本来这篇文章应该叫做网格与参考线,只是本人对参考线的应用还很 ...
- 动态面板——axure线框图部件库介绍
1.什么是Axure的动态面板 按照Axure官方网站的解释 :动态面板控件(Dynamic Panel)可以让你实现高级的交互功能,实现原型的高保真度.动态面板包含有多个状态(states),每个状 ...
- windows的定时任务设置
windows 的Schedule Task .创建配置 1.点击"開始" 2.点击"控制面板" 3.双击"任务计划" 4.双击" ...
- javascript中apply和eval结合的强大用法
eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码 如下例子 <a class="cl ...