iOS中使用较多的3款地图,google地图、百度地图、苹果自带地图(高德)。其中苹果自带地图在中国使用的是高德的数据。苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图。在国内使用的较多的就是百度、苹果自带地图(高德),以下总结下这两个。
一、苹果地图的使用
因为苹果使用的是高德的地图,加上苹果做的一些封装,使用起来也非常方便。不需要引入第三方框架,相比较之下,使用百度地图SDK会使源码与程序都 大10M多,这点很蛋疼。同时由于苹果使用的是高德,不会像谷歌地图一样在国内乌龟一样的访问速度,确实做一些地图相关的东西,非常有吸引力。
主要用到系统的两个框架:CoreLocation与MapKit。
1、CoreLocation实现定位 (没有UI的,只是负责一些数据)
Tips:
需要CLLocationManager定位管理器来管理定位。(开启与结束等)
使用模拟器时,需要设置经纬度:调试--》位置--》自定义位置 输入经纬度即可。(北京:北纬39.9”,东经116. 3”)
定位代码如下:
- #import<CoreLocation/CoreLocation.h>
- @interfaceMyViewController()<CLLocationManagerDelegate>
- @property(nonatomic,strong)CLLocationManager*locMgr;
- @end
- @implementationMyViewController
- -(CLLocationManager*)locMgr
- {
- #warning定位服务不可用
- if(![CLLocationManagerlocationServicesEnabled])returnnil;
- if(!_locMgr){
- //创建定位管理者
- self.locMgr=[[CLLocationManageralloc]init];
- //设置代理
- self.locMgr.delegate=self;
- }
- return_locMgr;
- }
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- //开始定位用户的位置
- [self.locMgrstartUpdatingLocation];
- }
- #pragmamark-CLLocationManagerDelegate
- /**
- *只要定位到用户的位置,就会调用(调用频率特别高)
- *@paramlocations:装着CLLocation对象
- */
- -(void)locationManager:(CLLocationManager*)managerdidUpdateLocations:(NSArray*)locations
- {
- //CLLocation中存放的是一些经纬度,速度等信息.要获取地理位置需要转换做地理位置编码.
- //1.取出位置对象
- CLLocation*loc=[locationsfirstObject];
- NSLog(@"CLLocation----%@",loc);
- //2.取出经纬度
- CLLocationCoordinate2Dcoordinate=loc.coordinate;
- //3.打印经纬度
- NSLog(@"didUpdateLocations------%f%f",coordinate.latitude,coordinate.longitude);
- //停止定位(省电措施:只要不想用定位服务,就马上停止定位服务)
- [managerstopUpdatingLocation];
- }
- @end
用CoreLocation还能实现:地理信息编码、反编码、经纬度间距离计算等。
2、MapKit上实现定位(有UI的,可以标记大头针、显示文字等)
MapView就是苹果自带的地图控件,拖控件或手码创建都行。
- #import<MapKit/MapKit.h>
- #import<CoreLocation/CoreLocation.h>
- @interfaceMyViewController()<MKMapViewDelegate>
- @property(weak,nonatomic)IBOutletMKMapView*mapView;
- @end
- @implementationMyViewController
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- //1.跟踪用户位置(显示用户的具体位置)
- self.mapView.userTrackingMode=MKUserTrackingModeFollow;
- //2.设置地图类型
- self.mapView.mapType=MKMapTypeStandard;
- //3.设置代理
- self.mapView.delegate=self;
- }
- #pragmamark-MKMapViewDelegate
- /**
- *当用户的位置更新,就会调用
- *
- *@paramuserLocation表示地图上蓝色那颗大头针的数据
- */
- -(void)mapView:(MKMapView*)mapViewdidUpdateUserLocation:(MKUserLocation*)userLocation
- {
- userLocation.title=@"苍老师在这里";
- userLocation.subtitle=@"苍老师在这里,你知道吗?";
- CLLocationCoordinate2Dcenter=userLocation.location.coordinate;
- NSLog(@"%f%f",center.latitude,center.longitude);
- //设置地图的显示范围,让其显示到当前指定的位置
- MKCoordinateSpanspan=MKCoordinateSpanMake(0.021321,0.019366);//这个显示大小精度自己调整
- MKCoordinateRegionregion=MKCoordinateRegionMake(center,span);
- [mapViewsetRegion:regionanimated: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*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
- //添加对BMKMapManager的初始化,并填入您申请的授权Key
- BMKMapManager*mapManager=[[BMKMapManageralloc]init];
- //如果要关注网络及授权验证事件,请设定generalDelegate参数
- BOOLret=[mapManagerstart:@"你的授权key,自己改"generalDelegate:nil];
- if(!ret){
- NSLog(@"地图管理器初始化失败!");
- }
- returnYES;
- }
viewController中使用也很简单
- #import"BMKMapManager.h"
- #import"BMKMapView.h"
- @interfaceXNViewController()
- {
- BMKMapView*_mapView;
- }
- @end
- @implementationXNViewController
- -(void)viewDidLoad{
- [superviewDidLoad];
- _mapView=[[BMKMapViewalloc]initWithFrame:CGRectMake(55,100,200,200)];
- [self.viewaddSubview:_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