iOS development: get city, province and other information through latitude and longitude

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>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.