iOS---实现原生地图和定位

基础的位置信息包括两条:定位服务和地图。定位服务由 Core Location framework提供, Core Location framework包含用户的位置和朝向(设备的方向);地图是由Map Kit framework提供的,Map Kit framework支持大头标和导航,但是要想用Map Kit framework,必须要打开the Maps capability在工程里面,定位服务和地图在iOS and OS X上面都是可以使用的。



iOS---实现原生地图和定位_第1张图片

位置服务为应用程序提供地理信息

了解用户的地理位置可以提高您提供的信息的质量,甚至可能是应用程序的核心。具有导航功能的应用程序使用位置服务监视用户的位置并生成更新。其他类型的应用程序使用位置服务来实现附近用户之间的社交连接。

获取用户的位置信息

为了一些目地(社交、导航等)应用程序需要使用用户的位置信息,我们可以通过 the Core Location framework得到用户(设备当前的位置)的位置信息,如:

1.标准位置服务提供了一种高度可配置的方式来获取当前位置和跟踪更改。

2.区域监视使您能够监视定义的地理区域和蓝牙低能量信标区域的边界交叉点。

3.重要的更改位置服务提供了一种获取当前位置并在发生重大更改时得到通知的方法,但是正确使用它以避免使用过多的电源是至关重要的。

the Core Location framework的环境配置:需要把the Core Location framework链接进我们的工程,还需要导入头文件 #import


iOS---实现原生地图和定位_第2张图片

开启定位服务

- (void)startStandardUpdates{


    if (nil == locationManager) {


        locationManager = [[CLLocationManager alloc]init];

        locationManager.delegate = self;

        locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;

        locationManager.distanceFilter = 500;

        [locationManager startUpdatingHeading];

    }

}

#pragma mark---处理传入的位置事件--CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{

    CLLocation *location = [locations lastObject];

    NSDate *eventDate = location.timestamp;

    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];

    if (fabs(howRecent) < 15.0) {

   //如果事件是最近发生的,用它做一些事情。

        NSLog(@"%f,%f",location.coordinate.latitude,location.coordinate.longitude);

    }

}



开启位置更新

- (void)startSignificantChangeUpdates{

    if (nil == locationManager) {

        locationManager = [[CLLocationManager alloc]init];

        locationManager.delegate = self;

        [locationManager startMonitoringSignificantLocationChanges];

    }

}

#pragma mark---处理传入的位置事件--CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{

    CLLocation *location = [locations lastObject];

    NSDate *eventDate = location.timestamp;

    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];

    if (fabs(howRecent) < 15.0) {

        //如果事件是最近发生的,用它做一些事情。

        NSLog(@"%f,%f",location.coordinate.latitude,location.coordinate.longitude);

    }

}



为了在用户和应用之间建立信任,苹果规定使用Core Location的应用必须在Info.plist文件中包含 NSLocationAlwaysUsageDescription 或者NSLocationWhenInUseUsageDescription 这个key,并且对应的key值还需要一个描述信息,用来向用户介绍怎么样使用定位信息。

你可能感兴趣的:(iOS---实现原生地图和定位)