Android使用GoogleMap实现定位与路径检索功能
本文是作者在学习使用Google Map 时的学习笔记,采用的是Kotlin语言编写。
- 1. Google Map定位
- 1.1 API KEY创建
- 1.1.1 手动创建
- 1.1.2 Android Studio创建
- 1.2 基础地图展示
- 1.3 定位功能
- 1.1 API KEY创建
- 2. Google Map路线规划
- 2.1 路径信息获取
- 2.2 Map绘制路径
- 2.3 启用外部浏览器或地图APP实现路径规划与导航
1. Google Map定位
1.1 API KEY创建
1.1.1 手动创建
- 打开网址:https://cloud.google.com/maps-platform/ 登陆后点击右上角
控制台
按钮
- 进入控制台后 点击顶部左侧按钮
选择项目
按钮
- 有项目则选择项目打开,跳至第5步,无项目则新建项目后继续第4步
- 新建项目Map Project Test
- 管理项目支持的API与服务,选择左侧
API与服务
然后点击库
按钮
- 地图API与服务列表,可以全部开启,在本文中用到了
Maps SDK for Android
,Maps JavaScript API
在上文Android使用Google定位服务定位并将经纬度转换为详细地址信息 会用到Places API
- 点击
Maps SDK for Android
然后启用开服务
- 项目API与服务的凭据,选择左侧
API与服务
然后点击凭据
按钮,在点击新建凭据
,选择API密钥
- 生成API KEY
Google Map 所需要的密钥就生成了,如果想要限制密钥的使用,点击限制密钥
按钮即可进行设置,在此我不进行设置,这个API KEYAIzaSyBAQIaEYapcR4kCFPt4735cM-Z0ZQDCv14
所有人所有项目都可以使用。 - 限制密钥,在生成密钥的时候可以点击限制密钥按钮,在 API和服务 凭据栏 可以编辑密钥 进行限制密钥操作。
1.1.2 Android Studio创建
如果嫌弃上面步骤繁琐,可以在创建项目的时候,直接创建Google Maps Activity
然后找到
app\src\debug\res\values\google_maps_api.xml
打开XML文件中列出的URL链接,即可自动创建一个仅供当前APP使用的API KEY。
1.2 基础地图展示
在创建API KEY的时候,采用方式二创建,然后将生成的API KEY 填入
debug\res\values\google_maps_api.xml
与 release\res\values\google_maps_api.xml
文件中。
运行App即可展示基础地图,代码就不贴了,简单说下几个地方的变化
1 app的 build.gradle 添加了依赖
implementation 'com.google.android.gms:play-services-maps:15.0.1'
2 debug 与 release文件
3 AndroidManifest.xml 文件中添加了以下内容
<meta-dataandroid:name="com.google.android.geo.API_KEY"android:value="@string/google_maps_key" />
<meta-dataandroid:name="com.google.android.gms.version"android:value="@integer/google_play_services_version" />
1.3 定位功能
查看上一篇文章:Android使用Google定位服务定位并将经纬度转换为详细地址信息
在上文的基础上,进行简单的修改。地图初始化后开始获取位置信息,得到位置信息后,将地图中心移动到当前位置即可
class MapLocationActivity : AppCompatActivity() {private var googleMap: GoogleMap? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_maps)val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragmentmapFragment.getMapAsync(this::onMapReady)}private fun onMapReady(map: GoogleMap) {googleMap = map//此处进行权限申请,位置信息获取 调用 自己编写的 requestLocationPermission() 方法}
}
修改上文中的handleLocation(location: Location)方法
@SuppressLint("MissingPermission")private fun handleLocation(location: Location) {val map = googleMap ?: returnmap.isMyLocationEnabled = truemap.uiSettings.isMyLocationButtonEnabled = trueval latLng = LatLng(location.latitude, location.longitude)//地图中心位置移动到定位位置,并设置地图缩放等级15map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f))//定位成功后可停止获取位置更新stopLocationUpdates()}
详细代码:MapLocationActivity
2. Google Map路线规划
2.1 路径信息获取
Google Map 并没有直接给出路径规划
的方法,但可以使用Polyline
绘制折线。
官方文档:https://developers.google.com/maps/documentation/android-sdk/shapes
然后路线信息获取可以通过HTTP请求Google Map Web Sevice 下的 Directions API
获取到。
URL示例:https://maps.googleapis.com/maps/api/directions/json?origin=成都&destination=深圳&language=zh-CN
或者采用经纬度做参数
https://maps.googleapis.com/maps/api/directions/json?origin=30.5702000000,104.0647600000&destination=22.5428600000,114.0595600000&language=zh-CN
更多参数以及数据字段信息请查看API官方文档
官方文档:https://developers.google.com/maps/documentation/directions/intro
JSON示例(数据为成都到深圳,使用mode = driving
的路线规划):
JSON 数据中 routes
对应路线信息,legs
下 steps
字段对应整个行程路线的步骤 json如下
但如果只是绘制路线,我们可以获取 overview_polyline
中的内容,可以发现这个字段 与地图路线相关的类 Polyline
对应。
2.2 Map绘制路径
在这里网络请求以及JSON解析就不写了,HTTP 请求2.1中给出的示例URL,获取到返回的JSON 然后解析我们需要的字段 overview_polyline
对应的的数据来绘制路线。
此处需要介绍一个库 Google Maps Android API Utility Library
,在此 需要库中的提供的方法将我们获取的路径信息 解码
路线绘制代码如下:
class MapLocationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_maps)val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this::onMapReady)} private fun onMapReady(map: GoogleMap) {val line = "agryDundzRnXibE~yM{lBlyXaM|}O{y@`_SgrIb_OamDnpOmkA`bSseJ" +"jyTe|MlqHsgKpfBw|If`F}kBpiFefCp}EgeDdpO{uHjsIe`QnnHcy_@nmKk}Et`NsaMlsQisVbqJq" +"iTreNciY~eKcmSxkI{vOlnKonHtmZqwNr{PwtJ~pK_vDlfI}sQvwB}sLzeHodLvhEboBdbCcUzmApl" +"CniDaUr}CoyDzyCtDxmFkxDzi@kpJfgC_~EtcApt@hbA}fDuy@ycEpnAwgDkcC}lBjqDgsKpdDmqIx" +"d@_iIlbCawB`}AqoD|nBw`DjcGebAxnGjyA~jOv|@vpCyoB~oJcJf_InaAfcCl~BriInj@flAklCtk" +"GuxD`lHsqBxhDu~D~~Em{Nx_@gtH_`BkzVll@}eIomBy`GzaDemDdsD~rBnmOd}HxrMvjD~wGbVtuEe" +"hBjkLx`DhkKflDlwE`A`zBtfCd_KuWz_Jrj@ptDnqA|mMkVnsL}iAvkL`|AnyJ{LvdBd_@nyB{rHjzG" +"ijC~tDsm@dkFwzAbrHi_D~uAjqC||C{pFxkEg|SdpDgoZjmIikPleFo~LlmEqjN~eBm~VxnJk~OvcFo" +"dJjWwdKxoFae`@~yEe~Hfo@ckMxyG_nSnrLii_@r_CmxOtzGaoRlxBauJ`LifN~`D}uE_ZuyHmr@o|I" +"mfCsh\\giEmuIkeAkyLhmC_u\nwAkd\ti@ugSxqG{uf@npD_jFsvAkhMsvCkuIlyAehFqt@wlMzvEs_G" +"h`EiePr`DgcLbiCmfExgJ|lAtlk@upH~gRo`C`jGuoCnmFolCnvEhpExpFd{@fgDyt@xqJ{rRjqE}xD" +"`xIosB|hQktGzbQa{EnxG_|FfuJwdG|qFsvBye@}fFhkBqaM~fGulPwZe_\\dt@g`IzfDsrFx`FmpCf|A" +"qyEhxE{eJ`_BwjGpbIuzF`cHm`Ixz@yfEbwCarDcnBuzNbgFolk@uIooW`pLouAd`L{`B`dP}rEfyK}x" +"Bx~FinFx{D{cKxc@amGfzA_qHnbBghSlk@_gN`gHyfFbbN{jJnvKafKv_OkgA~bFefBlrDgvGbdHipFr}" +"CuiH~pIs~Ip~JqtKndIidR~`@kgKrcDgqHpfRcnMrrCeoDlnG{|@|eD_`K|rBoeK|uAom\\wpFwlO``@wsO" +"ocAyeG~pBw|G_k@cvJbcFw|UfnNesNblGorHtwEam@vsLpuDppLqnErkBeaLpzCkuD~fImkHz|KnqBn" +"`Dyw@ryBcnDvoHmdI~gAywG~wBadOuRgp@"val decodedPath = PolyUtil.decode(line) //来源Google Map Utilval lineOptions = PolylineOptions().apply {addAll(decodedPath) //添加路线color(Color.GREEN) //线条设置jointType(JointType.ROUND)width(15f)}map.addPolyline(lineOptions)}
}
效果图:
Google Maps Android API Utility
还有其他方便的工具,此处附上官方地址:
https://developers.google.com/maps/documentation/android-sdk/utility/
路径规划的线条设置也还有很多样式,此处附上介绍文档:
https://developers.google.com/maps/documentation/android-sdk/shapes#customizing_appearances
2.3 启用外部浏览器或地图APP实现路径规划与导航
很多时候我们自己的APP 内嵌地图只是需要获取定位信息,以及目的地信息,比较复杂路线规划以及导航功能,可以通过外部浏览器或Google地图APP来实现。
实现代码:
class MapLocationActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_maps)startOtherMap.setOnClickListener {val url = Uri.parse("https://www.google.com/maps/dir/?api=1&origin=" +"30.5702000000,104.0647600000&destination=22.5428600000,114.0595600000")val intent = Intent().apply {action = "android.intent.action.VIEW"data = url}startActivity(intent)}}
}
实现效果(在内嵌的地图的APP中,打开外部地图,并传递起始点):
附上启动外部浏览器或地图相关的官方文档链接:
https://developers.google.com/maps/documentation/urls/guide
附上代码链接:
https://github.com/897532167/GoogleMapDemo/blob/master/app/src/main/java/cn/xhuww/googlemapdemo/MapLocationActivity.kt
Android使用GoogleMap实现定位与路径检索功能相关推荐
- Android使用GoogleMap实现定位及定位回正
Android使用GoogleMap实现定位及定位回正 关于: 效果图 配置 在Android studio添加对应配置 开始使用 实现定位及定位移动方向 文末 关于: 本篇内容主要介绍如何使用G ...
- Android安卓百度地图定位+导航+路径规划实现APP(源码+APK) 毕业设计
百度地图实时定位+导航路径规划的实现APP 本科生毕业设计:<一种智能停车系统的设计>,成都信息工程大学,2018 使用到的技术 百度地图SDK LBS云数据管理 路径规划与导航 二维码扫 ...
- Android 集成GoogleMap,实现定位和获取位置信息
1.准备 我使用的是AS2.2.2,首先FQ注册google开发者帐号,准备获取API Key,网上有许多相关资料我就不再赘述,这里讲一个比较小白级的获取方法,可以减少许多输入 1.1. AS创建项目 ...
- 【Android】3.22 示例22--LBS云检索功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 简介:介绍如何使用LBS.云检索用户自有数据. 详述: (1)LBS.云是百度地图针对LBS开发者推出的平台级 ...
- 百度地图 Android SDK - 检索功能使用的简单演示样例
百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...
- Android Studio 实现地图定位(移动开发技术作业)
文章目录 一.项目要求 二.项目功能展示 三.项目具体实现方法 1.创建项目及Android studio基础配置 2.将地图进行显示以及定位(代码实现) 四.遇到的问题解决方法及总结 五.项目源代码 ...
- Android 高德地图的定位,周边搜索
刚弄完这两个功能,当然是结合官网例子实现的.效果还行,稍作优化便可整合到app使用.在这里做一下总结,及说明下我的思路. 刚开始上手感觉比较乱学起来也比较累,方法,类太多,直接复制各种错,还不知道为什 ...
- Android如何实现地图定位?Android studio+百度地图API+Android6.0系统实现地图显示、地址设置、点击地图定位功能(详细)
文章说明:本文初衷是为了记录毕设学习过程,避免忘记操作流程.该功能是毕业设计的Android软件端的功能之一,本文将从获取百度地图密钥(AK)开始,详细地对地图定位配置和相关代码进行说明,文末将附上实 ...
- ROS 教程2 机器人雷达建图 蒙特卡洛定位 导航 路径规划 仿真
ros 机器人雷达建图 蒙特卡洛定位 导航 路径规划 仿真 move_base gmapping acml 博文github 一.安装 turtlebot 移动机器人底座 进行导航 1.安装系统依赖 ...
最新文章
- 成功解决ValueError: Unable to add relationship because child variable ‘ID‘ in ‘cats_df‘ is also its inde
- Linux进程间通信分类 以及 pipe的原理实现
- SQL Server 自增字段重置
- ncnn:提取所有层特征值
- @ta,一起过节吧!
- Robochameleon——Quick Start Guide
- 基于netty4.x开发时间服务器
- .net如何获取文件夹中的文件_access递归列出文件夹中的文件
- 计算机基础与应用32页,《计算机基础与应用》2次作业及答案
- 《Android开发艺术探索》— Android 书籍
- js鼠标禁止右键、复制粘贴代码
- 3dmax加载las数据
- TFP-161/100/6MM/6MM/MPU
- 微信小程序云函数请求接口
- 条码软件批量打印标签 连接Excel方式
- 关于我用python表白成功这件事【表白成功】
- oop练习(第11周)
- 参与诺基亚N78“连城决” 探索全球最神秘的地区
- 一名计科生的周总结(week 2)
- 融云X-Meetup南京站 探讨实时通信架构的高质量设计