最近接触了一个international的项目, 用到Google地图, 在此稍微总结一下, 方便以后使用;
一. 准备工作
开发Google地图当然离不开翻墙了, 先分享几个好用的免费翻墙软件:
1.软件:
lantern
(For Window, Mac, Android, Ubuntu)
LetsVPN(appStore直接下载)
(For iOS)
2.相关资料:
Google地图API
官方Google地图API
SMCalloutView
这个是点击大头针弹出信息框的自定义视图, 官方地图自定义有局限性, 下面👇会讲到, 示例如图:
二.开发内容
对于iOS开发者, Google地图提供了两个开发入口:
Maps SDK for iOS
添加 Google 地图
Places API for iOS
添加位置的最新信息
1.Places API for iOS
这个一般开发Google地图用不到, 不过还是简单说一下, 官方demo截图;
section0: (Autocomplete)
Autocomplete主要功能是搜索相关的位置信息(文本方式);
里面还会展示UISearchBar/UISearchViewController的几种呈现方法, 感兴趣的可以看看;
section1: (Programmatic APIs)
Programmatic APIs主要展示搜索或所选点附近的信息(地图方式);
2.Maps SDK for iOS
重点介绍内容, mark, mark….
还是一样, 先看下官方demo, 大概浏览一下Google地图的功能;
2.1 常用类介绍:
|
|
2.2 常用方法介绍:
GMSMapViewDelegate
:
2.3 Google Maps URL 架构(单独介绍一下):
确实与国内不同, Google地图URL架构没在demo中介绍;
👇介绍一下:
iOS 版 Google Maps 应用支持以下 URL 架构:
comgooglemaps://
和comgooglemaps-x-callback://
– 这些架构允许您启动 iOS 版 Google Maps 应用,并执行下列几项操作之一:
- 以指定的缩放级别显示指定位置的地图。
- 搜索位置或地点,并将它们显示在地图上。
- 请求从一个位置前往另一个位置的路线。 可以返回以下四种交通方式的路线:驾车、步行、骑自行车和乘坐公共交通工具。
- 向应用添加导航。
- 当应用完成后,使用 comgooglemaps-x-callback:// 发出一个回调。 回调经常用来使用户返回到最初打开 iOS 版 Google Maps 的应用。
comgooglemapsurl://
– 此架构允许您使用从桌面 Google Maps 网站得到的 URL 启动 iOS 版 Google Maps 应用。 这意味着您可以为用户提供原生移动体验,而不是简单地加载 Google Maps 网站。
- 原始 URL 可以是 maps.google.com,或者 google.com/maps,也可以使用任何有效的国家代码顶级域名来代替 com。
- 您还可以传递 goo.gl/maps 重定向 URL。
您可以将 x-source 和 x-success 参数与 comgooglemapsurl:// URL 架构结合使用来发出回调。
2.3.1 检查设备上是否已安装 Google Maps 应用;
2.3.2 显示地图
参数:
center
:这是地图视口中心点。 其格式为用逗号分隔的字符串latitude
,longitude
。mapmode
:设置所显示地图的种类。 可以设置为:standard 或 streetview。 如果未指定,则将使用当前的应用设置。views
:开启/关闭特定视图。 可以设置为:satellite
、traffic
或transit
。 可以使用逗号分隔符来设置多个值。 如果指定了不带任何值的参数,那么将清除所有的视图。zoom
:指定地图的缩放级别。12//示例 URL,它以纽约为中心、采用 14 级缩放级别来显示地图,且开启了交通视图comgooglemaps://?center=40.765819,-73.975866&zoom=14&views=traffic
2.3.3 搜索
参数:
q
:用于搜索的查询字符串。12//示例 URL 用来在指定位置附近搜索“Pizza"comgooglemaps://?q=Pizza¢er=37.759748,-122.427135
2.3.4 显示路线
参数:
saddr
:设置路线搜索的起点。 它可以是一个纬度、经度或查询格式的地址。 如果它是返回多个结果的查询字符串, 将选择第一个结果。 如果该值留空,那么将使用该用户的当前位置。daddr
:设置路线搜索的终点。 具有与saddr
相同的格式和行为。directionsmode
:交通方式。 可以设置为:driving
、transit
、bicycling
或walking
。12// 示例 URL 用来显示 Google 纽约办事处与肯尼迪国际机场之间的交通路线comgooglemaps://?saddr=Google+Inc,+8th+Avenue,+New+York,+NY&daddr=John+F.+Kennedy+International+Airport,+Van+Wyck+Expressway,+Jamaica,+New+York&directionsmode=transit
2.3.5 指定回调URL
参数:
x-source
– 发送x-callback
请求的应用的名称。 最好使用短名称。x-success
– 完成时调用的 URL。 通常,这是您自己的应用的 URL 架构,可以让用户返回到原来的应用。1234// 示例将启动 iOS 版 Google Maps 应用,并以纽约为中心显示地图。 该应用还会显示标有“SourceApp”的按钮。 当点击“SourceApp”按钮时,iOS 版 Google Maps 应用将发出一个指向虚拟的 URL 架构的回调, sourceapp://?resume=true.comgooglemaps-x-callback://?center=40.765819,-73.975866&zoom=14&x-success=sourceapp://?resume=true&x-source=SourceApp
2.3.6 向应用添加导航
该代码将执行以下操作:
- 验证 comgooglemaps-x-callback:// URL 架构是否可用。
- 启动 iOS 版 Google Maps 应用,并请求前往纽约市肯尼迪国际机场的路线。 将起始地址留空即可请求从用户的当前位置出发的路线。
- 将标记为“AirApp”的按钮添加到 iOS 版 Google Maps 应用中。 该按钮标签由 x-source 参数定义。
- 当用户点击返回按钮时,调用虚拟 URL 架构 sourceapp://,。
三.遇到的问题
开发中难免遇到一些稀奇古怪的问题, 这里就着我遇到的问题分享一下;
需求:
实现一个自定义的弹窗, 要求点击弹窗左边视图返回上一页, 点击右边视图跳转导航功能;
问题:
在mapView:markerInfoWindow:
中我自定义了一个气泡视图, 视图左右各一个按钮, 按钮的点击方法被屏蔽, 只响应了整个气泡视图的点击方法(mapView:didTapInfoWindowOfMarker:
);
解决办法:
在试了n个方法后, 终于让我找到了SMCalloutView, github上的一个自定义气泡的三方, 可以自由定义左右,中间, 背景视图, 非常棒👍, O(∩_∩)O哈哈~
首先是基础操作:
之后初始化SMCalloutView
, 创建一个空View;
其次是GMSMapViewDelegate里面的设置:
结果就可以在点击方法里面尽情的调用了:
最后感谢这位网友的分享, 附上链接:
stackoverflow网友的分享
关于Google地图开发:
iOS Google地图SDK入门教程
iOS--谷歌地图相关功能的实现