ios系統(tǒng)經(jīng)緯度轉(zhuǎn)百度經(jīng)緯度及經(jīng)緯度轉(zhuǎn)地址

版權(quán)聲明:本文為博主原創(chuàng)文章测萎,未經(jīng)博主允許不得轉(zhuǎn)載。

   正在進(jìn)行的項(xiàng)目中有這樣的需求:定位獲得當(dāng)前經(jīng)緯度,再用百度Place API使用經(jīng)緯度查詢周邊信息。這里不需要顯示地圖,只需要定位跌穗。看似思路很順暢虏辫,做起來(lái)卻不容易蚌吸。
  iPhone的GPS定位(CLLocationManager)獲得的經(jīng)緯坐標(biāo)是基于WGS-84坐標(biāo)系(世界標(biāo)準(zhǔn)),Google地圖使用的是GCJ-02坐標(biāo)系(中國(guó)特色的火星坐標(biāo)系)砌庄,這就是為什么獲得的經(jīng)緯坐標(biāo)在google地圖上會(huì)發(fā)生偏移羹唠。我項(xiàng)目需求是使用百度Place API,百度的經(jīng)緯坐標(biāo)在GCJ-02的基礎(chǔ)上再做了次加密娄昆,就是DB-09坐標(biāo)系佩微。就想使用百度地圖的[iOS](http://lib.csdn.net/base/ios) SDK,里面的坐標(biāo)系統(tǒng)都是一致的而不用轉(zhuǎn)換萌焰,由于不想讓項(xiàng)目太大哺眯,所以沒(méi)有用百度的sdk,所以另辟蹊徑了扒俯。
   在網(wǎng)上搜索一番奶卓,有現(xiàn)成百度的接口轉(zhuǎn)換坐標(biāo),經(jīng)試驗(yàn) 從WGS-84到GCJ-02撼玄,再到DB-09夺姑,經(jīng)兩次轉(zhuǎn)換后,順利獲得當(dāng)前正確地理位置信息和周邊信息掌猛,當(dāng)然這些信息是來(lái)自百度的盏浙。

ZYLocationManager.h

[objc] view plain copy

import <Foundation/Foundation.h>

import <CoreLocation/CoreLocation.h>

import "Singleton.h"

typedef void(^locationBlock)(CLLocationCoordinate2D coor);
typedef void(^addressBlock)(NSString *address);

@interface ZYLocationManager : NSObject
singleton_interface(ZYLocationManager)

/**

  • 獲取糾偏后的經(jīng)緯度(百度地圖經(jīng)緯度)
    */
  • (void) getLocationCoordinate:(locationBlock) locaiontBlock;

/**

  • 獲取糾偏后的經(jīng)緯度(百度地圖經(jīng)緯度)和地址
    */
  • (void) getLocationCoordinate:(locationBlock) locaiontBlock address:(addressBlock) addressBlock;

@end

ZYLocationManager.m

[objc] view plain copy

import "ZYLocationManager.h"

import "AFNetworking.h"

define IOS_Version [[UIDevice currentDevice].systemVersion floatValue]

@interface ZYLocationManager ()<CLLocationManagerDelegate>{
// 保存block
locationBlock _locationBlock;
addressBlock _addressBlock;
}

@property (nonatomic, strong) CLLocationManager *lm;

@end

@implementation ZYLocationManager
singleton_implementation(ZYLocationManager)

/**

  • 懶加載
    */
  • (CLLocationManager *)lm
    {
    if (!_lm) {
    _lm = [[CLLocationManager alloc] init];
    _lm.delegate = self;
    // 定位精準(zhǔn)度
    _lm.desiredAccuracy = kCLLocationAccuracyBest;
    // 重新定位的距離
    _lm.distanceFilter = 1000.0f;
    }
    return _lm;
    }

/**

  • 類第一次使用的時(shí)候被調(diào)用
    */
  • (void)initialize
    {
    ZYLocationManager *manager = [self sharedZYLocationManager];
    // ios8后需要向用戶請(qǐng)求權(quán)限
    if (IOS_Version >= 8.0) {
    [manager.lm requestWhenInUseAuthorization];
    [manager.lm requestAlwaysAuthorization];
    }
    // 開始定位
    [manager.lm startUpdatingLocation];
    }

pragma mark - CLLocationManager獲取經(jīng)緯度的代理方法

  • (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
    CLLocation *location = [locations lastObject];
    CLLocationCoordinate2D coor = location.coordinate;
    // NSLog(@"緯度:%.6f 經(jīng)度%.6f", coor.latitude, coor.longitude);
    NSString *x1 = [NSString stringWithFormat:@"%f", coor.longitude];
    NSString *y1 = [NSString stringWithFormat:@"%f", coor.latitude];
    // http://api.map.baidu.com/ag/coord/convert?from=0&to=2&x=113.377346&y=23.132648
    __block NSDictionary *dict1 = @{@"from":@"0",
    @"to":@"2",
    @"x":x1,
    @"y":y1
    };
    AFHTTPRequestOperationManager *roManager = [AFHTTPRequestOperationManager manager];
    // 1、ios系統(tǒng)經(jīng)緯度(國(guó)際標(biāo)準(zhǔn))轉(zhuǎn)谷歌經(jīng)緯度
    [roManager GET:@"http://api.map.baidu.com/ag/coord/convert" parameters:dict1 success:^(AFHTTPRequestOperation *operation, id responseObject) {
    __block NSString *resultX = [self base64Decode:responseObject[@"x"]];
    __block NSString *resultY = [self base64Decode:responseObject[@"y"]];
    dict1 = @{@"from":@"2",
    @"to":@"4",
    @"x":resultX,
    @"y":resultY
    };

      // 2荔茬、谷歌經(jīng)緯度轉(zhuǎn)百度經(jīng)緯度  
      [roManager GET:@"http://api.map.baidu.com/ag/coord/convert" parameters:dict1 success:^(AFHTTPRequestOperation *operation, id responseObject) {  
          resultX = [self base64Decode:responseObject[@"x"]];  
          resultY = [self base64Decode:responseObject[@"y"]];  
          CLLocationCoordinate2D resultCoor = CLLocationCoordinate2DMake([resultY floatValue], [resultX floatValue]);  
          // 給block賦值  
          if (_locationBlock) {  
              _locationBlock(resultCoor);  
          }  
          [self getAddressWithCoordinate:resultCoor];  
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
          NSLog(@"%@", error);  
      }];  
    

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"%@", error);
    }];
    // 停止定位
    [self.lm stopUpdatingLocation];
    }

  • (void)getLocationCoordinate:(locationBlock)locaiontBlock
    {
    _locationBlock = locaiontBlock;
    }

  • (void)getLocationCoordinate:(locationBlock)locaiontBlock address:(addressBlock)addressBlock
    {
    _locationBlock = locaiontBlock;
    _addressBlock = addressBlock;
    }

pragma mark - base64解密

  • (NSString *)base64Decode:(NSString *)str
    {
    // 1废膘、加密字符串轉(zhuǎn)二進(jìn)制數(shù)據(jù)
    NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
    // 2、二進(jìn)制數(shù)據(jù)轉(zhuǎn)字符串
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }

pragma mark - 經(jīng)緯度轉(zhuǎn)地址

  • (void)getAddressWithCoordinate:(CLLocationCoordinate2D)coor
    {
    if (coor.latitude == 0 || coor.longitude == 0) return;

    CLLocation *loca = [[CLLocation alloc] initWithLatitude:coor.latitude longitude:coor.longitude];
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:loca completionHandler:^(NSArray *placemarks, NSError *error) {
    if (placemarks.count == 0 || error) return;

      CLPlacemark *pm = [placemarks lastObject];  
      if (_addressBlock) {  
          _addressBlock(pm.thoroughfare);  
      }  
    

    }];
    }

@end

IOS8后慕蔚,請(qǐng)求定位需要請(qǐng)求權(quán)限丐黄,代碼ZYLocationManager.m已經(jīng)寫好了,不過(guò)還需要在info.plist中坊萝,添加兩個(gè)屬性NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription孵稽,屬性值即是你需要提示給用戶的信息,如下圖所示:

將ZYLocationManager.h和ZYLocationManager.m拖入項(xiàng)目中十偶,即可直接調(diào)用ZYLocationManager.h定義的兩個(gè)方法菩鲜,獲取到百度經(jīng)緯度和地址。

原文出處: http://blog.csdn.net/u013454067/article/details/45131387

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惦积,一起剝皮案震驚了整個(gè)濱河市接校,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖蛛勉,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹿寻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诽凌,警方通過(guò)查閱死者的電腦和手機(jī)毡熏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侣诵,“玉大人痢法,你說(shuō)我怎么就攤上這事《潘常” “怎么了财搁?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躬络。 經(jīng)常有香客問(wèn)我尖奔,道長(zhǎng),這世上最難降的妖魔是什么穷当? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任提茁,我火速辦了婚禮,結(jié)果婚禮上膘滨,老公的妹妹穿的比我還像新娘甘凭。我一直安慰自己稀拐,他們只是感情好火邓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著德撬,像睡著了一般铲咨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜓洪,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天纤勒,我揣著相機(jī)與錄音,去河邊找鬼隆檀。 笑死摇天,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恐仑。 我是一名探鬼主播泉坐,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裳仆!你這毒婦竟也來(lái)了腕让?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤歧斟,失蹤者是張志新(化名)和其女友劉穎纯丸,沒(méi)想到半個(gè)月后偏形,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡觉鼻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年俊扭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坠陈。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡统扳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畅姊,到底是詐尸還是另有隱情咒钟,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布若未,位于F島的核電站朱嘴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粗合。R本人自食惡果不足惜萍嬉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隙疚。 院中可真熱鬧壤追,春花似錦、人聲如沸供屉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伶丐。三九已至悼做,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哗魂,已是汗流浹背肛走。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留录别,地道東北人朽色。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像组题,于是被迫代替她去往敵國(guó)和親葫男。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容