iOS_21团购_定位并根据经纬度,解析出城市名

//
//  LocationTool.m
//  帅哥_团购
//
//  Created by beyond on 14-8-22.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "LocationTool.h"
#import <CoreLocation/CoreLocation.h>

#import "City.h"
#import "MetaDataTool.h"

@interface LocationTool () <CLLocationManagerDelegate>
{
    // 定位管理器,作用是:定位当前用户的经度和纬度
    CLLocationManager *_mgr;
    // 地理位置解码编码器
    CLGeocoder *_geo;
}
@end
@implementation LocationTool
singleton_implementation(LocationTool)
// 工具类初始化时,创建 定位管理器、地理位置解码编码器,并设置代理为当前工具类
- (id)init
{
    if (self = [super init]) {
        // 定位管理器
        _mgr = [[CLLocationManager alloc] init];
        // 当它定位完成,获得用户的经度和纬度时,会通知代理
        _mgr.delegate = self;
        // 定位管理器 开始更新位置
        [_mgr startUpdatingLocation];
        // CLGeocoder可以根据刚才定位管理器定出的 经度和纬度,解码出用户所在位置的城市名
        _geo = [[CLGeocoder alloc] init];
    }
    return self;
}
#pragma mark - 定位管理器 代理方法,定位完毕时侯调用--1------3
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    // 1.既然已经定位到了用户当前的经纬度了,那么可以让定位管理器 停止定位了
    [_mgr stopUpdatingLocation];
    // 2.然后,取出第一个位置,根据其经纬度,通过CLGeocoder反向解析,获得该位置所在的城市名称,转成城市对象,用工具保存
    CLLocation *loc = locations[0];
    // 3.CLGeocoder反向通过经纬度,获得城市名
    [_geo reverseGeocodeLocation:loc completionHandler:
     ^(NSArray *placemarks, NSError *error) {
         // 从字典中取出 state---->某某市
         CLPlacemark *place = placemarks[0];
         NSString *cityName = place.addressDictionary[@"State"];
         // 将最后一个字符【市】去掉,转成城市对应,用工具保存
         cityName = [cityName substringToIndex:cityName.length - 1];
         // 从工具的城市字典中,根据城市名,取出对应的城市对象
         City *city = [MetaDataTool sharedMetaDataTool].allCitiesDict[cityName];
         // 设置当前城市对象,内部会拦截setter操作,并发出通知
         [MetaDataTool sharedMetaDataTool].currentCity = city;
         // 定位,并且解析完毕之后,用成员变量记住
         _locationCity = city;
         // 为成员属性赋值,供发起GET请求时,提供经纬度参数用
         _locationCity.position = loc.coordinate;
     }];
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。