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

Practical analysis of user operations and behavioral data insights!

What exactly is user operation ? What abilities a...

Ad creative writing secrets, take them!

In the process of bidding promotion , I believe t...

Lenovo launches P90, the world's first Intel 64-bit quad-core mobile phone

At CES 2015, Lenovo released the first mobile pho...

How can you do Android development if you don’t even understand Context?

Activity mActivity =new Activity() As an Android ...

A guide to avoiding pitfalls in overseas marketing

How popular are brands going overseas? According ...

A brief discussion on internal scrolling layout

1. What is inner scrolling layout? The so-called ...

The Internet in 2016: Where has all the traffic gone?

The trouble with public accounts: disappearing re...

How to write an excellent event planning and implementation plan?

Google is in talks with Chinese internet company N...

Former Douban Operations Director: How to acquire high-quality seed users?

Xiaobai talks a lot: At present, there are roughl...

How much does it cost to rent a game server per month?

How much does a game server cost per month? How m...