• 【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  


  • 相关阅读:
    LVM
    作业
    软件工程随笔
    woj1005-holding animals-01pack woj1006-Language of animals-BFS
    woj1002-Genesis woj1003-birthofnoah woj1004-noah's ark
    C++ new delete malloc free
    centos7+腾讯云服务器搭建wordpress
    C++ inline与operator
    next v5升级到next v7需要注意的地方
    python = 赋值顺序 && C++ side effect
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3966253.html
Copyright © 2020-2023  润新知