iOS - 地图开发@IT·互联网iOS Developer

iOS GoogleMaps的集成和详细使用

2017-07-19  本文已影响1093人  ZHANGKAILUN_

陆陆续续工作也快2年了,国内的一些sdk也用了不少,刚开工作的时候还是学习阶段,总是在论坛学习,还从来没有写过一篇像样的文章拿去和同行分享,初来乍到许多东西接触也只是皮毛,慢慢的才会深究,想来写了也是没什么可以拿去分享,最近新入职了一家公司,接触到了一些从来没用过的SDK,包括一些地图和海外支付的SDK,这篇文章主要讲一下如果集成GoogleMaps并将其使用到我们的项目中,小哥哥初来乍到,才疏学浅,有些东西还不是很熟练,而且书写的格式可能不是很正规,各位大神看过之后,请多多指教,直言不讳,THX~


NO.1 集成GoogleMaps

在iOS里面集成一个SDK的方式有很多种,我就不一一列出了,我大都是手动导入和Cocoapods导入,两种各有各的好处,举个例子,例如现在你的项目中导入了某个三方库需要修改而且不希望和你一起工作的同事因为手滑不小心update一下,建议使用手动导入,如果是特别官方的三方库,例如AFN和高德GoogleMaps这种,人家内部已经做的很成熟了,也无需进行改进,主要进行一些简单封装,更好的划分业务逻辑即可。

Cocoapods导入GoogleMaps,一些最基本的Cocoapods用法在此不进行赘述,pod search 你要加入的三方库,然后查看最新版本,在Podfile里面按照格式加入代码,回到终端 pod install即可,如果发现导入的并非官方给出最新的SDK,可以从更新pod源和pod xxxsdk update 入手,百试不厌...


NO.2 初始化CLLocationManager和GoogleMapsSDK

使用GoogleMaps和使用其他官方SDK一样需要appid或者Key或者secret,用你申请好的key在APPdelegate.m文件中进行初始化。代码如下

有木有很简单,一句代码即可,对比极光啊什么乱七八糟的很简单,嘻嘻,||0.0其实高德也差不多啦~但是和高德以及百度GoogleMaps最不同的地方,就是他要用apple官方给出的corelocation库进行定位,然后获取当前UserLocation,用location的latitude和longitude去显示用户的位置,这里有一些细节需要优化,按照博主的方法来,不需要走弯路,就在APPdelegate.m里面初始化CoreLocationManager最好,这样可以在你的HomePage界面进行监听用户的定位事件给出对应的处理,不需要再次初始化,做一个全局的Manager变量最好,代码如下

在此启动CLLocationManager即可

NO.3用GoogleMps展示当前用户的位置

展示用户当前位置是一个地图SDK最基本也是最简单功能,当然GoogleMaps也不例外,让我惊喜的是GoogleMaps已经在内部给使用者做好了定位点的朝向处理,不需要开发者自己处理,这个我在用高德地图已经开发过,如果有需要的同学可以在评论给回复,博主偷闲看到会答复哒~

核心代码如下

取到全局的CLLocationManager

根据CLLocationManager获取当前用户的经纬度

拿到userlocation去初始化GoogleMaps

看到这里给读者介绍一下GMSCameraPosition这个类,和高德百度等国内地图又一个不同的是,GoogleMaps视角引用的是一个Camera的概念,很好理解,就是你希望看的视角是怎样的,都可以用这个类GMSCameraPosition去设定,比如你希望你看到地图的缩放范围,中心是哪里,通通可以用这个类去处理,是不是很nice!!读到这里,就可以看到当前的所处位置啦,没图说杰宝是吧,上图~

因为我的手机是en语言环境,所以显示的都是英文,可以根据手机的语言环境进行修改地标的显示语言。

NO.4 GoogleMaps的主要代理方法

4.1 点击地图调用

4.2 map移动之后调用

4.3 map将要移动调用

4.4 点击map上的大头针调用

4.5点击GMSMarker的InfoWindow调用

我给出只是几个简单的代理方法,不要小瞧这几个代理方法,你需要的功能例如添加大头针,点大头针实现固定的Action,或者点击大头针规划路线等等等一系列Action,这些代理方法都可以帮你解决,具体看你如何运用,不做赘述,下面讲一下如果利用GoogleMaps进行线路规划。

NO.5 线路规划

用过高德和百度的小伙伴应该有用过线路规划这个功能,应用场景很多,例如用户想查看当前位置和目的地之间的线路,并且显示距离和时间等信息等等。但是GoogleMaps又很不同的,GoogleMaps很傲娇的没有和国内的地图SDK一样给出SDK接口,但是无妨,GoogleMaps API里面有提供公共的接口去供开发者使用。https://maps.googleapis.com/maps/api/directions/json?%@&origin=%@&destination=%@&mode=walking

加上如此url即可,%@作为占位,替换你需要填写的参数,StackOverFlow解决方法如此,origin是用户当前的位置的经纬度,destination是目的地的经纬度,mode代表你的交通方式,像我这种低碳出门方式的上班族当然是walking,虽然我有灰机,但是从来不开,嘻嘻~

在博主这里,我给这个方法封装了一下,供读者参考,如下~

具体的googlemap api的返回数据json我就不在此做赘述,读者可以自己去亲测一下,记得要开VPN,天朝用不了GoogleMaps很尴尬。。。

博主这样写是取到了距离(distance)和时间(duration),而且根据json中的路径编码绘制路径,代码如下~

这里有有一些业务逻辑代码,可以忽略掉。

NO.6 Ending

这是博主第一次写帖子,因为百度这种搜索GoogleMaps的讲解帖子很少,我起初做的时候也是搜了很多,但是看完感觉并没有完全解决了我想要的问题,在做这次项目的时候,基本是到国外网站去查找解决方法,这篇帖子旨在解决大家的问题和大家一齐进步,有些东西在没有接触的情况下,先去api文档作了解是最好的,先了解这个三方库的一些类和方法,再去着手项目,就会有了大体的思路。

NO.7 想说的话

我曾经看过一篇帖子,看到结尾之前觉得全文无亮点,但是看到结尾处亮了全文,我想repost一下

在技术学习的道路上,阅读量和代码量绝不能现行提升你的技术水平。同样写文章也如此,作者所写的文章完全是基于自己对技术的理解,在写作时也力求形象不抽象,绝不copy充数,所以也欢迎大家关注和参与讨论。技术学习绝不能孤胆英雄独闯天涯,而应该是一群人在一起的交流碰撞,享受智慧火花的狂欢。希望我的文章能成为你的盛宴,也渴望你的建议能成为我的大餐。

博主还会不定时更新,下篇文章具体讲解海外支付Stripe!

good luck!

上一篇下一篇

猜你喜欢

热点阅读