iOS接入Google maps

關(guān)于iOS 應(yīng)用如何添加谷歌地圖龙考,網(wǎng)上其實(shí)有很多文檔愤炸,但當(dāng)自己實(shí)際開發(fā)時(shí)期揪,還是會(huì)有很多問題,我這次的需求就是地圖國(guó)際化规个,原項(xiàng)目中接的是高德地圖凤薛,現(xiàn)在要替換成谷歌地圖姓建,要求功能及頁(yè)面的UI顯示要和之前一致(肯定不可能百分百,至少8成像)

一枉侧、項(xiàng)目集成Google maps

官方文檔連接
推薦是使用cooapods集成引瀑,通常會(huì)使用一下兩個(gè)sdk

  • 'GoogleMaps',基本的定位功能榨馁,通常加載這一個(gè)sdk就可以了
  • 'GooglePlaces',實(shí)現(xiàn)搜索功能帜矾,官方文檔叫做地點(diǎn)自動(dòng)完成翼虫,可查找周圍的興趣點(diǎn),即POI
    在Podfile添加
pod 'GoogleMaps', '指定版本號(hào)'

二屡萤、獲取API密匙

前提是已經(jīng)在GoogleMapSDK中創(chuàng)建好自己的應(yīng)用珍剑,需要有自己的Google賬號(hào),我這邊是Android開發(fā)早就申請(qǐng)好了死陆,我復(fù)制了APIKey直接使用

三招拙、配置plist文件搭建定位環(huán)境

info.pliste文件中添加定位權(quán)限相關(guān)字段

四、調(diào)用代理方法實(shí)現(xiàn)相關(guān)需求

  1. AppDelegate.m 導(dǎo)入框架
#import <GoogleMaps/GoogleMaps.h>
  1. application:didFinishLaunchingWithOptions方法中添加
[GMSServices provideAPIKey: @"APIKey"];
  1. 在我們需要顯示地圖的控制器調(diào)用API方法
    為了解耦代碼增加可復(fù)用性措译,可以寫一個(gè)地圖的類别凤,對(duì)地圖做一些簡(jiǎn)單的配置,增加一些自定義方法领虹,比如地圖截屏方法规哪,因?yàn)轫?xiàng)目的需求的是在一個(gè)IM空間中,像他人發(fā)送一個(gè)地理位置塌衰,以聊天氣泡的形式發(fā)送(參考微信中的“發(fā)送位置”)

簡(jiǎn)單介紹一下我用到的 GMSMapView的屬性,如果想知道全部的屬性最疆,可以在地圖的sdk加載好之后杯巨,點(diǎn)擊進(jìn)入到 GMSMapView 中查看

- (GMSMapView *)mapView {
    if (!_mapView) {
       // 根據(jù)經(jīng)緯度和縮放等級(jí),初始化相機(jī)服爷,顯示地圖內(nèi)容镜会,用于海外的桶至,最好給個(gè)國(guó)外的經(jīng)緯度
        GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:38.8879
                                                                longitude:-77.0200
                                                                     zoom:17];
        _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
        _mapView.mapType = kGMSTypeNormal;
        // 設(shè)備當(dāng)前位置的點(diǎn)和準(zhǔn)確性圓圈
        _mapView.myLocationEnabled = YES;
        // 使用指南針
        _mapView.settings.compassButton = YES;
        // 當(dāng)前位置按鈕
        _mapView.settings.myLocationButton = YES;
        _mapView.settings.indoorPicker = NO;
    }
    return _mapView;
}
  • 需求1:大頭針和當(dāng)前位置的地址始終顯示在屏幕中間
    這時(shí)候建議不要使用 GMSMarker价涝,因?yàn)樵趯?shí)際使用過(guò)程中,每當(dāng)移動(dòng)地圖居兆,大頭針會(huì)一跳一跳的簇宽,雖然也是一直顯示在最中間见妒,但是會(huì)有間歇性空白须揣,視覺效果不是很好卵酪,如果強(qiáng)行用GMSMarker來(lái)定義大頭針,操作會(huì)很復(fù)雜瘸羡,不如直接定義一個(gè)UIImageView峻村,那對(duì)應(yīng)的詳細(xì)地址氣泡也需要自定義粘昨,最好寫個(gè)類,下面還有需求可以復(fù)用
  • 需求2:地理位置反編譯工秩,本來(lái)是要顯示當(dāng)前位置的POI助币,但是 GMSMapView 沒有一個(gè)代理方法可以做到這一點(diǎn),只有點(diǎn)擊某個(gè)興趣點(diǎn)可以拿到那個(gè)興趣點(diǎn)的placeID惜姐,再根據(jù)placeID做其他操作坷衍,但是這不符合需求,需求是任意點(diǎn)都能拿到POI妻熊,如果任意點(diǎn)不是POI那就拿到最近的POI信息,這時(shí)候只引入 GoogleMaps 的sdk已經(jīng)不能滿足需求了预皇,需要在 Podfile 中添加 'GooglePlaces'
pod 'GooglePlaces','指定版本號(hào)'

但是我實(shí)際使用過(guò)程中發(fā)現(xiàn)潘悼,還是不能滿足現(xiàn)在的需求,他的代理方法返回的是附近一些POI點(diǎn)的集合榄檬,一個(gè)數(shù)組衔统,而且測(cè)試發(fā)現(xiàn)鹿榜,這個(gè)數(shù)組中的元素,只是你當(dāng)前設(shè)備所在位置周邊的POI的信息锦爵,不是隨著你地圖中心位置移動(dòng)而變化的舱殿,達(dá)不到想要的效果(也許還有其他方法我沒發(fā)現(xiàn),有經(jīng)驗(yàn)的大佬請(qǐng)教教我)险掀,最后退而求其次沪袭,用了 GMSAddress,對(duì)當(dāng)前經(jīng)緯度的位置做了反編譯樟氢,做多能拿到當(dāng)前位置是那條路和郵編冈绊。
提示: GMSServices 和 GMSPlacesClient 的 APIKey是不同的侠鳄,不能使用同一個(gè),

[GMSServices provideAPIKey: @"key1"];
[GMSPlacesClient provideAPIKey: @"key2"];

否則 GooglePlaces 里面類的代理方法使用都會(huì)報(bào)錯(cuò)Error Domain=com.google.places.ErrorDomain Code=-3 "An internal error occurred in the Places API library. If you believe this error represents a bug, please file a report using the instructions on our community and support page ([https://developers.google.com/places/ios-sdk/support)](https://developers.google.com/places/ios-sdk/support))." UserInfo={NSLocalizedFailureReason=An internal error occurred in the Places API library. If you believe this error represents a bug, please file a report using the instructions on our community and support page ([https://developers.google.com/places/ios-sdk/support).](https://developers.google.com/places/ios-sdk/support).), NSUnderlyingError=0x171251c10 {Error Domain=com.google.places.api.server.ErrorDomain Code=-2 "This API project is not authorized to use this API." UserInfo={NSLocalizedFailureReason=This API project is not authorized to use this API.}}}

  • 需求三3:別人點(diǎn)開我發(fā)送給他的位置死宣,要求地圖可滑動(dòng)縮放伟恶,但是我發(fā)送的位置處會(huì)有大頭針及地址氣泡,并且位置固定在對(duì)應(yīng)的經(jīng)緯度毅该,這就和需求1又不一樣了博秫,這時(shí)候最方便的就是用sdk中的大頭針 GMSMarker 并且自定義大頭針氣泡,在下面這個(gè)代理方法中寫視圖
- (nullable UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;

五眶掌、遇到的問題

  1. 當(dāng)他人查看我送的位置時(shí)挡育,一進(jìn)入到該頁(yè)面要求大頭針氣泡是始終顯示的,這就需要將地圖的 selectedMarker 設(shè)為當(dāng)前的大頭針朴爬,因?yàn)榈貓D可縮放滑動(dòng)即寒,當(dāng)點(diǎn)擊到地圖任意一點(diǎn),大頭針氣泡都會(huì)隱藏召噩,我這邊是在 didTapAtCoordinate 方法中設(shè)置地圖的 selectedMarker
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
    self.mapView.selectedMarker = self.defaultMarker;
}
  1. 打開地圖蒿叠,將地圖中心點(diǎn)移到很遠(yuǎn)的地方,大概5分鐘左右蚣常,地圖中心點(diǎn)會(huì)在自動(dòng)回到當(dāng)前設(shè)備所在位置,
    處理方法:我是將 CLLocationManager 的 distanceFilter 屬性設(shè)置成默認(rèn)的痊银,感覺是可以的抵蚊,我自測(cè)沒什么問題,具體我也不清楚溯革,等待測(cè)試反饋結(jié)果贞绳。
?著作權(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ō)我怎么就攤上這事∏裘担” “怎么了喧锦?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵读规,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我燃少,道長(zhǎng)束亏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任供汛,我火速辦了婚禮枪汪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怔昨。我一直安慰自己雀久,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布趁舀。 她就那樣靜靜地躺著赖捌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矮烹。 梳的紋絲不亂的頭發(fā)上越庇,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音奉狈,去河邊找鬼卤唉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仁期,可吹牛的內(nèi)容都是我干的桑驱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跛蛋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼熬的!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赊级,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤押框,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后理逊,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一薄翅、第九天 我趴在偏房一處隱蔽的房頂上張望沙兰。 院中可真熱鬧,春花似錦翘魄、人聲如沸鼎天。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斋射。三九已至,卻和暖如春但荤,著一層夾襖步出監(jiān)牢的瞬間罗岖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腹躁, 沒想到剛下飛機(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)容