iOS接入谷歌地圖SDK

前言

最近在開(kāi)發(fā)國(guó)際版APP時(shí)需要用到谷歌地圖递胧,由于資料比較少求妹,所以這里記錄一下接入過(guò)程和基本的地圖功能的使用温鸽。

1.獲取API key

需要有去墻外進(jìn)入谷歌地圖開(kāi)放平臺(tái):https://cloud.google.com/maps-platform/?hl=zh-CN 這個(gè)是中文語(yǔ)言的地址肥哎,先登錄谷歌賬號(hào)葫笼,然后點(diǎn)擊使用入門屹逛,按照步驟:選擇產(chǎn)品 --->設(shè)置結(jié)算信息(這里需要按照提示綁定國(guó)外的信用卡础废,這一步是必須的,否則無(wú)法使用谷歌地圖) 罕模,做完這兩步后即可啟用谷歌地圖api评腺,然后獲取到apiKey

這是谷歌地圖的文檔地址https://developers.google.com/maps/documentation/ios-sdk/get-api-key

image

可以看到這句話,這里提示的是上一步設(shè)置結(jié)算信息是必須的淑掌,只有設(shè)置了這個(gè)才能獲取到API key

2.添加API key到APP中

pod導(dǎo)入谷歌地圖蒿讥,我導(dǎo)入了地圖API 和地圖位置API,如果只需要圖層和定位功能抛腕,可能就不需要GooglePlaces

#谷歌地圖

    pod'GoogleMaps'

    pod'GooglePlaces'

在AppDelegate.m文件中添加以下代碼芋绸,key是相同值


@import GoogleMaps;
@import GooglePlaces;



//配置谷歌地圖

[GMSServices provideAPIKey:@"YOUR_API_KEY"];

[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

3.開(kāi)始使用谷歌地圖API

這里是谷歌地圖的demo,有需要的可以直接下載下來(lái)

https://github.com/googlemaps/maps-sdk-for-ios-samples

1)初始化mapView

 //設(shè)置地圖view担敌,這里是隨便初始化了一個(gè)經(jīng)緯度摔敛,在獲取到當(dāng)前用戶位置到時(shí)候會(huì)直接更新的

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868

                                                            longitude:151.2086

                                                                 zoom:12];

    _mapView= [GMSMapViewmapWithFrame:CGRectZerocamera:camera];

    _mapView.delegate = self;

    _mapView.settings.compassButton = YES;

    _mapView.frame = self.view.frame;

    [self.view addSubview:_mapView];

2)初始化locationManager


    // 1、判斷設(shè)備是否開(kāi)啟定位服務(wù)

    if (![CLLocationManager locationServicesEnabled]) {

        // 彈框提示

        [NSObject mh_showAlertViewWithTitle:@"溫馨提示"message:@"您的設(shè)備暫未開(kāi)啟定位服務(wù)全封!"confirmTitle:@"確定"];

        return;

    }


    // 2舷夺、初始化定位服務(wù)

    _locationManager = [[CLLocationManager alloc] init];

    // 3苦酱、請(qǐng)求定位授權(quán)*

    // 請(qǐng)求在使用期間授權(quán)(彈框提示用戶是否允許在使用期間定位),需添加NSLocationWhenInUseUsageDescription到info.plist

    [_locationManager requestWhenInUseAuthorization];

    // 請(qǐng)求在后臺(tái)定位授權(quán)(彈框提示用戶是否允許不在使用App時(shí)仍然定位),需添加NSLocationAlwaysUsageDescription添加key到info.plist

    [_locationManager requestAlwaysAuthorization];

    // 4、設(shè)置定位精度

    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    // 5给猾、設(shè)置定位頻率疫萤,每隔多少米定位一次

    //_locationManager.distanceFilter = 10.0;

    // 6、設(shè)置代理

    _locationManager.delegate = self;

    // 7敢伸、開(kāi)始定位

    // 注意:開(kāi)始定位比較耗電扯饶,不需要定位的時(shí)候最好調(diào)用 [stopUpdatingLocation] 結(jié)束定位。

    [_locationManager startUpdatingLocation];

3)CLLocationManagerDelegate


// 位置更新

- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations {

    if(!_firstLocationUpdate){

        _firstLocationUpdate = YES;//只定位一次的標(biāo)記值

        // 獲取最新定位

        CLLocation*location = locations.lastObject;

        // 打印位置信息

        NSLog(@"經(jīng)度:%.2f, 緯度:%.2f", location.coordinate.latitude,location.coordinate.longitude);

        // 停止定位

        [_locationManager stopUpdatingLocation];

        //如果是國(guó)內(nèi)池颈,就會(huì)轉(zhuǎn)化坐標(biāo)系尾序,如果是國(guó)外坐標(biāo),則不會(huì)轉(zhuǎn)換躯砰。

        _coordinate2D = [JZLocationConverter wgs84ToGcj02:location.coordinate];

        //移動(dòng)地圖中心到當(dāng)前位置

        _mapView.camera = [GMSCameraPosition cameraWithTarget:_coordinate2D

                                                         zoom:14];

    }

}

這里用到了一個(gè)開(kāi)源庫(kù) JZLocationConverter每币,它是用來(lái)處理在國(guó)內(nèi)定位,獲取到的坐標(biāo)系和國(guó)外定位坐標(biāo)系的轉(zhuǎn)化問(wèn)題琢歇,可以查看相關(guān)資料了解有關(guān)定位坐標(biāo)系的知識(shí)兰怠。

https://github.com/JackZhouCn/JZLocationConverter

4) GMSMapViewDelegate


//地圖移動(dòng)后的代理方法,我這里的需求是地圖移動(dòng)需要刷新網(wǎng)絡(luò)請(qǐng)求李茫,查找附近的店鋪

-(void)mapView:(GMSMapView*)mapView idleAtCameraPosition:(GMSCameraPosition*)position{

}

5)GMSAutocompleteViewControllerDelegate

我這里有用到谷歌地圖的位置搜索揭保,它這里是封裝好的VC,可以直接使用魄宏,可以自定義等有很多功能秸侣,具體可以看上面發(fā)過(guò)的谷歌地圖demo地址

在點(diǎn)擊搜索位置按鈕的方法里可以寫如下代碼:

    //記得要#import <GooglePlaces/GooglePlaces.h>
    GMSAutocompleteViewController*autocompleteViewController =

    [[GMSAutocompleteViewController alloc] init];

    autocompleteViewController.delegate=self;

    [self presentViewController:autocompleteViewController animated:YES completion:nil];


//選擇了位置后的回調(diào)方法

- (void)viewController:(GMSAutocompleteViewController*)viewController

didAutocompleteWithPlace:(GMSPlace*)place {

    //移動(dòng)地圖中心到選擇的位置

    _mapView.camera = [GMSCameraPosition cameraWithTarget:place.coordinate

                                                     zoom:14];

    // Dismiss the view controller and tell our superclass to populate the result view.

    [viewControllerdismissViewControllerAnimated:YES completion:nil];

}
//失敗回調(diào)
- (void)viewController:(GMSAutocompleteViewController *)viewController
didFailAutocompleteWithError:(NSError *)error {
    // Dismiss the view controller and notify our superclass of the failure.
    [viewController dismissViewControllerAnimated:YES completion:nil];
    //[self autocompleteDidFail:error];
}
//取消回調(diào)
- (void)wasCancelled:(GMSAutocompleteViewController *)viewController {
    // Dismiss the controller and show a message that it was canceled.
    [viewController dismissViewControllerAnimated:YES completion:nil];
    //[self autocompleteDidCancel];
}

6)添加marker


-(void)addMarkers{

    // Add a custom 'glow' marker around Sydney.

    NSArray * latArr = @[@(_coordinate2D.latitude +0.004),@(_coordinate2D.latitude +0.008),@(_coordinate2D.latitude +0.007),@(_coordinate2D.latitude -0.0022),@(_coordinate2D.latitude -0.004)];

    NSArray * lngArr = @[@(_coordinate2D.longitude+0.007),@(_coordinate2D.longitude+0.001),@(_coordinate2D.longitude+0.003),@(_coordinate2D.longitude+0.003),@(_coordinate2D.longitude-0.008)];

    for(int i =0;i < latArr.count; i++){

        GMSMarker*sydneyMarker = [[GMSMarkeralloc]init];

        sydneyMarker.title=@"Sydney!";

        sydneyMarker.icon= [UIImageimageNamed:@"marker"];

        sydneyMarker.position=CLLocationCoordinate2DMake([latArr[i]doubleValue], [lngArr[i]doubleValue]);

        sydneyMarker.map=_mapView;

    }

}

總結(jié)

本篇主要是介紹了作者接入谷歌地圖的步驟,和實(shí)現(xiàn)一些需求所用到的地圖的部分功能宠互。

谷歌地圖還封裝好了顯示當(dāng)前定位信息的方法味榛,可以直接啟用定位,然后使用kvo監(jiān)聽(tīng)定位成功回調(diào),不過(guò)這里我未找到能讓它暫停定位的方法予跌,為了APP的省電原因搏色,所以采用了系統(tǒng)的CoreLocation來(lái)實(shí)現(xiàn)定位功能


_mapView.settings.myLocationButton = YES;

有其他需求,可參照谷歌地圖demo工程

期待

1.文章若對(duì)您有些許幫助匕得,請(qǐng)給個(gè)喜歡继榆,畢竟碼字不易;若對(duì)您沒(méi)啥幫助汁掠,請(qǐng)給點(diǎn)建議略吨,切記學(xué)無(wú)止境。

2.針對(duì)文章所述內(nèi)容考阱,閱讀期間任何疑問(wèn)翠忠;請(qǐng)?jiān)谖恼碌撞吭u(píng)論指出,我會(huì)火速解決和修正問(wèn)題乞榨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秽之,一起剝皮案震驚了整個(gè)濱河市当娱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考榨,老刑警劉巖跨细,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異河质,居然都是意外死亡冀惭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門掀鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)散休,“玉大人,你說(shuō)我怎么就攤上這事乐尊∑萃瑁” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扔嵌,是天一觀的道長(zhǎng)限府。 經(jīng)常有香客問(wèn)我,道長(zhǎng)对人,這世上最難降的妖魔是什么谣殊? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任拂共,我火速辦了婚禮牺弄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宜狐。我一直安慰自己势告,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布抚恒。 她就那樣靜靜地躺著咱台,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俭驮。 梳的紋絲不亂的頭發(fā)上回溺,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音混萝,去河邊找鬼遗遵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逸嘀,可吹牛的內(nèi)容都是我干的车要。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崭倘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翼岁!你這毒婦竟也來(lái)了类垫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琅坡,失蹤者是張志新(化名)和其女友劉穎悉患,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體榆俺,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡购撼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谴仙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迂求。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晃跺,靈堂內(nèi)的尸體忽然破棺而出揩局,到底是詐尸還是另有隱情,我是刑警寧澤掀虎,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布凌盯,位于F島的核電站,受9級(jí)特大地震影響烹玉,放射性物質(zhì)發(fā)生泄漏驰怎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一二打、第九天 我趴在偏房一處隱蔽的房頂上張望县忌。 院中可真熱鬧,春花似錦继效、人聲如沸症杏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厉颤。三九已至,卻和暖如春凡简,著一層夾襖步出監(jiān)牢的瞬間逼友,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工秤涩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帜乞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓溉仑,卻偏偏與公主長(zhǎng)得像挖函,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • 寫在前面 :請(qǐng)求谷歌API,您可以通過(guò)請(qǐng)求 http://maps.googleapis.com/(對(duì)于中國(guó)用戶怨喘,...
    li_禮光閱讀 4,905評(píng)論 3 8
  • 朋友張君必怜,牛逼的很肉拓,屬于高大全! 想想若干年前梳庆,張君在農(nóng)村暖途,沒(méi)有水,喝水需要去幾里路以外去挑膏执,一畝田要熬幾個(gè)晚上驻售,...
    往事不再隨風(fēng)閱讀 278評(píng)論 0 1
  • 頂著感冒,拖著疲憊的身軀更米,完整的走完了從高中開(kāi)始到如今你為人妻為人母的婚禮欺栗,聽(tīng)聞你和姐夫的長(zhǎng)跑愛(ài)情,瞬間就讓我佩服...
    蘇初見(jiàn)閱讀 285評(píng)論 0 0
  • 四周空氣忽然凝固征峦,亞索的臉色抑制不住地變換迟几,似在努力壓抑內(nèi)心之中的憤怒,久久栏笆,他神情冷漠地說(shuō)类腮。 “今日吾使命在身,...
    化濁閱讀 283評(píng)論 0 0
  • 林間松韻蛉加,石上泉聲蚜枢,靜里聽(tīng)來(lái),識(shí)天地自然鳴珮七婴;草際煙光祟偷,水心云影察滑,閑中觀去打厘,見(jiàn)乾坤最上文章。
    江南莫之閱讀 901評(píng)論 12 29