iOS development: get city, province and other information through latitude and longitude
Last Update:2016-03-17
Source: Internet
Author: User
<span id="Label3"></p><p><p>iOS system with the positioning, with Cllocationmanager can easily achieve the positioning of the operation, obtained is a set of latitude and longitude, of course, you can also obtain the corresponding provinces, cities, streets and other information according to the latitude and longitude, the following look at a city according to latitude and longitude of the Demo:</p></p><p><p></p></p><p><p>Because the Cllocationmanager class is required to obtain the latitude and longitude, and this class is contained in the Corelocation framework, obtaining the city information requires a mapkit framework, so you need to first import the two frameworks into the project:</p></p><p><p>To import a frame: select 1.target--2.build phases--3.link Binary with libraries--4. click on the "+" sign: step:<br></p></p><p><p></p></p><p><p>After clicking the plus sign, enter the appropriate frame in the search box to Search:</p></p><p><p></p></p><p><p></p></p><p><p></p></p><p><p>The following is the code to write, first in the View controller import:</p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">12</td> <td class="code"><code class="cpp preprocessor">#import <CoreLocation/CoreLocation.h></code><code class="cpp preprocessor">#import <MapKit/MapKit.h></code></td> </tr> </tbody> </table><p><p>Two header files, and then the specific code in. m is as Follows:</p></p><p><p></p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 6667686970717273</td> <td class="code"><code class="cpp preprocessor"><code class="cpp preprocessor">#import "ANNViewController.h"</code></code><code class="cpp plain"><code class="cpp plain">@interface ANNViewController ()</code></code><code class="cpp plain"><code class="cpp plain">@property (strong, nonatomic) IBOutlet UILabel *longitude;</code></code><code class="cpp plain"><code class="cpp plain">@property (strong, nonatomic) IBOutlet UILabel *latitude;</code></code><code class="cpp plain"><code class="cpp plain">@property (strong, nonatomic) IBOutlet UILabel *location;</code></code><code class="cpp plain"><code class="cpp plain">@property (strong, nonatomic) CLLocationManager *locationManager;</code></code><code class="cpp plain"><code class="cpp plain">@end</code></code><code class="cpp plain"><code class="cpp plain">@implementation ANNViewController</code></code><code class="cpp plain"><code class="cpp plain">- (</code></code><code class="cpp keyword bold"><code class="cpp keyword bold">void</code></code><code class="cpp plain"><code class="cpp plain">)viewDidLoad</code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">[super viewDidLoad];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">// Do any additional setup after loading the view, typically from a nib.</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.view.backgroundColor = [UIColor whiteColor];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code> <code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//创建CLLocationManager对象</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.locationManager = [[CLLocationManager alloc] init];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//设置代理为自己</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.locationManager.delegate = self;</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp plain"><code class="cpp plain">- (IBAction)locationButton:(UIButton *)sender {</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">[self.locationManager startUpdatingLocation];</code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp plain"><code class="cpp plain">- (</code></code><code class="cpp keyword bold"><code class="cpp keyword bold">void</code></code><code class="cpp plain"><code class="cpp plain">)locationManager:(CLLocationManager *)manager</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">didUpdateToLocation:(CLLocation *)newLocation</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">fromLocation:(CLLocation *)oldLocation</code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//将经度显示到label上</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.longitude.text = [NSString stringWithFormat:@</code></code><code class="cpp string"><code class="cpp string">"%lf"</code></code><code class="cpp plain"><code class="cpp plain">, newLocation.coordinate.longitude];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//将纬度现实到label上</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.latitude.text = [NSString stringWithFormat:@</code></code><code class="cpp string"><code class="cpp string">"%lf"</code></code><code class="cpp plain"><code class="cpp plain">, newLocation.coordinate.latitude];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">// 获取当前所在的城市名</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">CLGeocoder *geocoder = [[CLGeocoder alloc] init];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//根据经纬度反向地理编译出地址信息</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error)</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">if</code></code><code class="cpp plain"><code class="cpp plain">(array.count > 0)</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">CLPlacemark *placemark = [array objectAtIndex:0];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//将获得的所有信息显示到label上</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">self.location.text = placemark.name;</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//获取城市</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSString *city = placemark.locality;</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">if</code></code><code class="cpp plain"><code class="cpp plain">(!city) {</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">city = placemark.administrativeArea;</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSLog(@</code></code><code class="cpp string"><code class="cpp string">"city = %@"</code></code><code class="cpp plain"><code class="cpp plain">, city);</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">else</code></code><code class="cpp keyword bold"><code class="cpp keyword bold">if</code></code><code class="cpp plain"><code class="cpp plain">(error == nil && [array count] == 0)</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSLog(@</code></code><code class="cpp string"><code class="cpp string">"No results were returned."</code></code><code class="cpp plain"><code class="cpp plain">);</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">else</code></code><code class="cpp keyword bold"><code class="cpp keyword bold">if</code></code><code class="cpp plain"><code class="cpp plain">(error != nil)</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSLog(@</code></code><code class="cpp string"><code class="cpp string">"An error occurred = %@"</code></code><code class="cpp plain"><code class="cpp plain">, error);</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">}];</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp comments"><code class="cpp comments">//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">[manager stopUpdatingLocation];</code></code><code class="cpp plain"><code class="cpp plain">}</code></code></td> </tr> </tbody> </table><p><p></p></p><p><p>The main city of municipalities to obtain the need to turn a corner, iOS7 added a new method, instead of the above method:</p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">123456789</td> <td class="code"><code class="cpp plain"><code class="cpp plain">- (</code></code><code class="cpp keyword bold"><code class="cpp keyword bold">void</code></code><code class="cpp plain"><code class="cpp plain">)locationManager:(CLLocationManager *)manager</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">didUpdateLocations:(NSArray *)locations</code></code><code class="cpp plain"><code class="cpp plain">{</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSLog(@</code></code><code class="cpp string"><code class="cpp string">"longitude = %f"</code></code><code class="cpp plain"><code class="cpp plain">, ((CLLocation *)[locations</code></code><code class="cpp plain"><code class="cpp plain">lastObject]).coordinate.longitude);</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">NSLog(@</code></code><code class="cpp string"><code class="cpp string">"latitude = %f"</code></code><code class="cpp plain"><code class="cpp plain">, ((CLLocation *)[locations lastObject]).coordinate.latitude);</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">[manager stopUpdatingLocation];</code></code><code class="cpp plain"><code class="cpp plain">}</code></code></td> </tr> </tbody> </table><p><p></p></p><p><p>After the treatment and the above method, we can look at.</p></p><p><p></p></p><p><p>There are also some Clgeocoder properties as Follows:</p></p><p><p></p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">12345678910111213141516</td> <td class="code"><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSDictionary *addressDictionary;</code></code><code class="cpp comments"><code class="cpp comments">// address dictionary properties</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *name; </code></code><code class="cpp comments"><code class="cpp comments">// eg. Apple Inc.</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *thoroughfare; </code></code><code class="cpp comments"><code class="cpp comments">// street address, eg. 1 Infinite Loop</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *subThoroughfare; </code></code><code class="cpp comments"><code class="cpp comments">// eg. 1</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *locality; </code></code><code class="cpp comments"><code class="cpp comments">// city, eg. Cupertino</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *subLocality; </code></code><code class="cpp comments"><code class="cpp comments">// neighborhood, common name, eg. Mission District</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *administrativeArea; </code></code><code class="cpp comments"><code class="cpp comments">// state, eg. CA</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *subAdministrativeArea; </code></code><code class="cpp comments"><code class="cpp comments">// county, eg. Santa Clara</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *postalCode; </code></code><code class="cpp comments"><code class="cpp comments">// zip code, eg. 95014</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *ISOcountryCode; </code></code><code class="cpp comments"><code class="cpp comments">// eg. US</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *country; </code></code><code class="cpp comments"><code class="cpp comments">// eg. United States</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *inlandWater; </code></code><code class="cpp comments"><code class="cpp comments">// eg. Lake Tahoe</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSString *ocean; </code></code><code class="cpp comments"><code class="cpp comments">// eg. Pacific Ocean</code></code><code class="cpp plain"><code class="cpp plain">@property (nonatomic, readonly) NSArray *areasOfInterest; </code></code><code class="cpp comments"><code class="cpp comments">// eg. Golden Gate Park</code></code></td> </tr> </tbody> </table><p><p>iOS development: get city, province and other information through latitude and longitude</p></p></span>