陸陸續(xù)續(xù)工作也快2年了,國內(nèi)的一些sdk也用了不少践瓷,剛開工作的時候還是學(xué)習(xí)階段院喜,總是在論壇學(xué)習(xí),還從來沒有寫過一篇像樣的文章拿去和同行分享晕翠,初來乍到許多東西接觸也只是皮毛喷舀,慢慢的才會深究,想來寫了也是沒什么可以拿去分享淋肾,最近新入職了一家公司硫麻,接觸到了一些從來沒用過的SDK,包括一些地圖和海外支付的SDK樊卓,這篇文章主要講一下如果集成GoogleMaps并將其使用到我們的項目中拿愧,小哥哥初來乍到,才疏學(xué)淺碌尔,有些東西還不是很熟練浇辜,而且書寫的格式可能不是很正規(guī),各位大神看過之后唾戚,請多多指教柳洋,直言不諱,THX~
NO.1 集成GoogleMaps
在iOS里面集成一個SDK的方式有很多種颈走,我就不一一列出了膳灶,我大都是手動導(dǎo)入和Cocoapods導(dǎo)入,兩種各有各的好處立由,舉個例子轧钓,例如現(xiàn)在你的項目中導(dǎo)入了某個三方庫需要修改而且不希望和你一起工作的同事因為手滑不小心update一下,建議使用手動導(dǎo)入锐膜,如果是特別官方的三方庫毕箍,例如AFN和高德GoogleMaps這種,人家內(nèi)部已經(jīng)做的很成熟了道盏,也無需進(jìn)行改進(jìn)而柑,主要進(jìn)行一些簡單封裝文捶,更好的劃分業(yè)務(wù)邏輯即可。
Cocoapods導(dǎo)入GoogleMaps媒咳,一些最基本的Cocoapods用法在此不進(jìn)行贅述粹排,pod search 你要加入的三方庫,然后查看最新版本涩澡,在Podfile里面按照格式加入代碼顽耳,回到終端 pod install即可,如果發(fā)現(xiàn)導(dǎo)入的并非官方給出最新的SDK妙同,可以從更新pod源和pod xxxsdk update 入手射富,百試不厭...
NO.2 初始化CLLocationManager和GoogleMapsSDK
使用GoogleMaps和使用其他官方SDK一樣需要appid或者Key或者secret,用你申請好的key在APPdelegate.m文件中進(jìn)行初始化粥帚。代碼如下
有木有很簡單胰耗,一句代碼即可,對比極光啊什么亂七八糟的很簡單芒涡,嘻嘻柴灯,||0.0其實高德也差不多啦~但是和高德以及百度GoogleMaps最不同的地方,就是他要用apple官方給出的corelocation庫進(jìn)行定位费尽,然后獲取當(dāng)前UserLocation弛槐,用location的latitude和longitude去顯示用戶的位置,這里有一些細(xì)節(jié)需要優(yōu)化依啰,按照博主的方法來乎串,不需要走彎路,就在APPdelegate.m里面初始化CoreLocationManager最好速警,這樣可以在你的HomePage界面進(jìn)行監(jiān)聽用戶的定位事件給出對應(yīng)的處理叹誉,不需要再次初始化,做一個全局的Manager變量最好闷旧,代碼如下
在此啟動CLLocationManager即可
NO.3用GoogleMps展示當(dāng)前用戶的位置
展示用戶當(dāng)前位置是一個地圖SDK最基本也是最簡單功能长豁,當(dāng)然GoogleMaps也不例外,讓我驚喜的是GoogleMaps已經(jīng)在內(nèi)部給使用者做好了定位點的朝向處理忙灼,不需要開發(fā)者自己處理匠襟,這個我在用高德地圖已經(jīng)開發(fā)過,如果有需要的同學(xué)可以在評論給回復(fù)该园,博主偷閑看到會答復(fù)噠~
核心代碼如下
取到全局的CLLocationManager
根據(jù)CLLocationManager獲取當(dāng)前用戶的經(jīng)緯度
拿到userlocation去初始化GoogleMaps
看到這里給讀者介紹一下GMSCameraPosition這個類酸舍,和高德百度等國內(nèi)地圖又一個不同的是,GoogleMaps視角引用的是一個Camera的概念里初,很好理解啃勉,就是你希望看的視角是怎樣的,都可以用這個類GMSCameraPosition去設(shè)定双妨,比如你希望你看到地圖的縮放范圍淮阐,中心是哪里叮阅,通通可以用這個類去處理,是不是很niceF亍浩姥!讀到這里,就可以看到當(dāng)前的所處位置啦状您,沒圖說杰寶是吧及刻,上圖~
因為我的手機(jī)是en語言環(huán)境,所以顯示的都是英文竞阐,可以根據(jù)手機(jī)的語言環(huán)境進(jìn)行修改地標(biāo)的顯示語言。
NO.4 GoogleMaps的主要代理方法
4.1 點擊地圖調(diào)用
4.2 map移動之后調(diào)用
4.3 map將要移動調(diào)用
4.4 點擊map上的大頭針調(diào)用
4.5點擊GMSMarker的InfoWindow調(diào)用
我給出只是幾個簡單的代理方法暑劝,不要小瞧這幾個代理方法骆莹,你需要的功能例如添加大頭針,點大頭針實現(xiàn)固定的Action担猛,或者點擊大頭針規(guī)劃路線等等等一系列Action幕垦,這些代理方法都可以幫你解決,具體看你如何運(yùn)用傅联,不做贅述先改,下面講一下如果利用GoogleMaps進(jìn)行線路規(guī)劃。
NO.5 線路規(guī)劃
用過高德和百度的小伙伴應(yīng)該有用過線路規(guī)劃這個功能蒸走,應(yīng)用場景很多仇奶,例如用戶想查看當(dāng)前位置和目的地之間的線路,并且顯示距離和時間等信息等等比驻。但是GoogleMaps又很不同的该溯,GoogleMaps很傲嬌的沒有和國內(nèi)的地圖SDK一樣給出SDK接口,但是無妨别惦,GoogleMaps API里面有提供公共的接口去供開發(fā)者使用狈茉。https://maps.googleapis.com/maps/api/directions/json?%@&origin=%@&destination=%@&mode=walking
加上如此url即可掸掸,%@作為占位氯庆,替換你需要填寫的參數(shù),StackOverFlow解決方法如此扰付,origin是用戶當(dāng)前的位置的經(jīng)緯度堤撵,destination是目的地的經(jīng)緯度,mode代表你的交通方式羽莺,像我這種低碳出門方式的上班族當(dāng)然是walking粒督,雖然我有灰機(jī),但是從來不開禽翼,嘻嘻~
在博主這里屠橄,我給這個方法封裝了一下族跛,供讀者參考,如下~
具體的googlemap api的返回數(shù)據(jù)json我就不在此做贅述锐墙,讀者可以自己去親測一下礁哄。
博主這樣寫是取到了距離(distance)和時間(duration),而且根據(jù)json中的路徑編碼繪制路徑溪北,代碼如下~
這里有有一些業(yè)務(wù)邏輯代碼桐绒,可以忽略掉。
NO.6 Ending
這是博主第一次寫帖子之拨,因為百度這種搜索GoogleMaps的講解帖子很少茉继,我起初做的時候也是搜了很多,但是看完感覺并沒有完全解決了我想要的問題蚀乔,在做這次項目的時候烁竭,基本是到國外網(wǎng)站去查找解決方法,這篇帖子旨在解決大家的問題和大家一齊進(jìn)步吉挣,有些東西在沒有接觸的情況下派撕,先去api文檔作了解是最好的,先了解這個三方庫的一些類和方法睬魂,再去著手項目终吼,就會有了大體的思路。
NO.7 想說的話
我曾經(jīng)看過一篇帖子氯哮,看到結(jié)尾之前覺得全文無亮點际跪,但是看到結(jié)尾處亮了全文,我想repost一下
在技術(shù)學(xué)習(xí)的道路上喉钢,閱讀量和代碼量絕不能現(xiàn)行提升你的技術(shù)水平垫卤。同樣寫文章也如此,作者所寫的文章完全是基于自己對技術(shù)的理解出牧,在寫作時也力求形象不抽象穴肘,絕不copy充數(shù),所以也歡迎大家關(guān)注和參與討論舔痕。技術(shù)學(xué)習(xí)絕不能孤膽英雄獨闖天涯评抚,而應(yīng)該是一群人在一起的交流碰撞,享受智慧火花的狂歡伯复。希望我的文章能成為你的盛宴慨代,也渴望你的建議能成為我的大餐。