iOS-CoreLocation: I know where you are!

iOS-CoreLocation: I know where you are!

1. Positioning

Steps:

Create a CLLocationManager instance and keep a strong reference to it

Set the CLLocationManager delegate to listen for and get the updated location

Start location update

  1. _manager?=?[[CLLocationManager?alloc]?init];
  2. _manager.delegate?=?self;
  3. [_manager?startUpdatingLocation];

Since in iOS8, developers need to actively request authorization from the system, the following steps are required in iOS8 and above:

Set NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in info.plist file

Use [_manager requestWhenInUseAuthorization] to request authorization in the code

Implement the Manager's proxy method didChangeAuthorizationStatus: to determine whether to start location updates based on the status

Parameter analysis

In the Manager's proxy method locationManager:didUpdateLocations:, the locations parameter passed in is of type CLLocation.

The main parameters of the CLLocation method are:

  1. //Longitude and latitude  
  2. @property (readonly,?nonatomic)?CLLocationCoordinate2D?coordinate;
  3. //sea level  
  4. @property (readonly,?nonatomic)?CLLocationDistance?altitude;
  5. //speed  
  6. @property (readonly,?nonatomic)?CLLocationSpeed?speed
  7. //Current timestamp  
  8. @property (readonly,?nonatomic,?copy)?NSDate?*timestamp;

2. Direction

How to use

The same three steps as positioning, the difference is that no authorization is required to obtain the direction

  1. _manager?=?[[CLLocationManager?alloc]?init];
  2. _manager.delegate?=?self;
  3. [_manager?startUpdatingHeading];

Parameter analysis

In the Manager's proxy method locationManager:didUpdateHeading:, the newHeading parameter passed in is of type CLHeading.

The main parameters of the CLHeading method are:

  1. //Declination from magnetic north  
  2. @property (readonly,?nonatomic)?CLLocationDirection?magneticHeading;
  3. //Declination angle from true north  
  4. @property (readonly,?nonatomic)?CLLocationDirection?trueHeading;

3. Regional monitoring

How to use

It also requires roughly three steps, the first two of which are the same as positioning, and the third step is to create a range:

  1. _manager?=?[[CLLocationManager?alloc]?init];
  2. _manager.delegate?=?self;
  3. if ?([[UIDevice?currentDevice].systemVersion?doubleValue]?>=? 8.0 )?{
  4. ???[_manager?requestAlwaysAuthorization];
  5. }
  6. CLLocationCoordinate2D?coordinate?=?CLLocationCoordinate2DMake( 32.656688 ,? 110.74677 );
  7. CLCircularRegion?*circular?=?[[CLCircularRegion?alloc]?initWithCenter:coordinate?radius: 1000 ?identifier:@ "bourne" ];
  8. [_manager?startMonitoringForRegion:circular];

Proxy method (one in, one out)

  1. //Called when entering the scope  
  2. -?( void )locationManager:(CLLocationManager?*)manager?didEnterRegion:(CLRegion?*)region?{
  3. ????NSLog(@ "I'm in!" );
  4. }
  5. //Called when leaving the scope  
  6. -?( void )locationManager:(CLLocationManager?*)manager?didExitRegion:(CLRegion?*)region?{
  7. NSLog(@ "I'm out!" );
  8. }

HELP: It seems that it doesn't work in iOS8.3, neither on real devices nor on simulators, but works fine on iOS7.1! I don't know what's going on, if anyone knows please tell me. Thank you.

4. Geocoding & De-geocoding

Geocoding means that you give it a place name and it returns the latitude and longitude of the place; reverse geocoding means that you give it a longitude and latitude and it returns a place name. If you do not use the positioning function, you do not need authorization.

Geocoding

  1. _coder?=?[[CLGeocoder?alloc]?init];
  2. [_coder?geocodeAddressString:@ "Hubei Automotive Industry College" ?completionHandler:^(NSArray?*placemarks,?NSError?*error)?{
  3. ???CLPlacemark?*marks?=?placemarks.firstObject;
  4. ???NSLog(@ "%f?-?%f" ,?marks.location.coordinate.latitude,?marks.location.coordinate.longitude);
  5. }];

There are many available properties in CLPlacemark, you can go in and take a look.

Reverse Geocoding

  1. CLLocation?*loc?=?[[CLLocation?alloc]?initWithLatitude: 32.656688 ?longitude: 110.74677 ];
  2. [_coder?reverseGeocodeLocation:loc?completionHandler:^(NSArray?*placemarks,?NSError?*error)?{
  3. ??? for ?(CLPlacemark?*mark?in?placemarks)?{
  4. ???????NSLog(@ "%@" ,?mark.name);
  5. ???}
  6. }];

It is relatively simple to implement, the key lies in how to use this data!

Extensions

CoreLocation is still relatively troublesome to use, requiring authorization, judging the system version, etc., so it is recommended to use a third-party framework, such as: LocationManager is very good, using Block, it is very simple!

<<:  Winning in design, high-end and classy or low-key and luxurious with connotation – iteration vs. planning

>>:  Foreign media comprehensive interpretation: iOS 9 everything we must know

Recommend

The leader of game development engine reform - cocos game engine

With the popularity of smart phones and tablets, ...

7 open source software that supports the entire Internet era

Open source software has now become the supportin...

Do not pick or eat poisonous plants on the plateau!

As the temperature continues to rise Spring on th...

Does being overweight mean being fat?

Popular saying: The main way to measure a person’...

A "mouth cannon" about architecture

Author: Duan Hechen The title of the article is v...

How to carry out advertising in the medical beauty industry? Case Analysis

Today, Qingguajun will share with you the analysi...