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

User growth: How to retain new users?

Retention of new users is a very important part o...

Online promotion channels for product operation and promotion plans!

In the mobile Internet industry, the market for g...

5 tips to solve 80% of the troubles of bringing goods to Douyin

The method of selling goods through live streamin...

Uncover the weather secrets behind the golden ginkgo

Autumn is here. As the temperature gradually drop...

Kuaishou short video operation strategy in 2022

1. Current Development Status of Kuaishou As for ...

What can we learn from Jiang Xiaobai’s marketing case?

In recent years, Jiang Xiaobai has achieved rapid...

Why do we cut mooncakes into pieces? It's not because they are too big.

In addition to symbolizing reunion, eating moonca...

Cold start operation skills of Douyin account

“It’s hard to create a new Douyin account now!” R...

Dapeng Education-Sketch Improvement Course

Dapeng Education-Sketch Improvement Course Resour...