【谷歌地图--MapsSDK集成】
上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性。这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助:
- 【谷歌地图–集成准备】
- 【谷歌地图–MapsSDK集成】
- 【谷歌地图–DirectionsSDK集成】
- 【谷歌地图–PlacesSDK集成】
开始正文啦:
由于众所周知的的原因,集成谷歌地图sdk前首先你的pc端和移动端都是要翻墙的,不然后续的一些功能你都无法操作。
谷歌地图–MapsSDK集成
相信经过 谷歌地图–集成准备 这篇文章,一些准备工作你基本差不多了,api_key也申请好了。
依赖添加
implementation 'com.google.android.gms:play-services-maps:17.0.0'
基本地图展示
废话不多说,咱们先上效果图:
布局文件:
<fragmentandroid:id="@+id/map"android:name="com.google.android.gms.maps.SupportMapFragment"android:layout_width="match_parent"android:layout_height="match_parent" />
关键代码:
class ExampleActivity : AppCompatActivity(), OnMapReadyCallback {private val TAG = "ExampleActivity"private lateinit var mGoogleMap: GoogleMap//富华游乐园val strOrigin = "36.71525382744859,119.16037559509276"val appointLoc = LatLng(strOrigin.split(",").toTypedArray()[0].toDouble(),strOrigin.split(",").toTypedArray()[1].toDouble());override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_example)val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?mapFragment!!.getMapAsync(this)}override fun onMapReady(mGoogleMap: GoogleMap?) {this.mGoogleMap = mGoogleMap ?: return;with(mGoogleMap) {// 移动地图到指定经度的位置moveCamera(CameraUpdateFactory.newLatLngZoom(appointLoc, 15f))//添加标记到指定经纬度addMarker(MarkerOptions().position(appointLoc).title("富华游乐园").snippet("$appointLoc")//设置谷歌地图自带的图标样式.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))//设置本地资源图标//.icon(BitmapDescriptorFactory.fromResource(R.drawable.baseline_change_history_red_a700_24dp))).showInfoWindow() //显示信息窗口}}}
到这里一个基本的地图展示,你已经完成啦!
定位
如果想添加定位功能的话,还需要添加这行依赖:
implementation 'com.google.android.libraries.places:places:2.4.0'
废话不多说,咱们先上效果图:
发起定位
关键代码:
private fun getDeviceLocation() {val selfPermission4 =ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)if (selfPermission4 != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION),12)return} else {Log.i(TAG, "getDeviceLocation: 已有权限")}mGoogleMap.isMyLocationEnabled = truemGoogleMap.uiSettings?.isMyLocationButtonEnabled = true//这行代码,就能发起定位请求val locationResult = fusedLocationProviderClient.lastLocation//监听定位结果locationResult.addOnCompleteListener(this) { task ->if (task.isSuccessful) {// Set the map's camera position to the current location of the device.var lastKnownLocation = task.resultif (lastKnownLocation != null) {Log.i(TAG, "getDeviceLocation: locationResult if")} else {Log.i(TAG, "getDeviceLocation: locationResult else")}} else {Log.e(TAG, "Exception: %s", task.exception)}}mGoogleMap!!.setOnMyLocationButtonClickListener {//返回 false,这样我们就不会使用该事件,而默认行为仍然会发生println("MainActivity.getDeviceLocation ddd")false}}
实时定位
/*** 监听位置变化*/private fun monitorLocationChange() {val selfPermission4 =ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)if (selfPermission4 != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION),12)return} else {Log.i(TAG, "monitorLocationChange: 已有权限")}val request = LocationRequest()request.priority = LocationRequest.PRIORITY_HIGH_ACCURACY//设置间隔request.setInterval(3000)//最快间隔request.fastestInterval = 3000//更新的次数哦//request.numUpdates=1mLocationCallback = object : LocationCallback() {override fun onLocationResult(locationResult: LocationResult?) {val lastLocation = locationResult?.lastLocationif (lastLocation != null) {Log.i(TAG, "onLocationResult: 监听位置变化结果")val curPosition = LatLng(lastLocation.latitude,lastLocation.longitude)mGoogleMap!!.animateCamera(CameraUpdateFactory.newLatLng(curPosition))} else {Log.i(TAG, "onLocationResult: 监听位置变化结果 lastLocation is null")}}}fusedLocationProviderClient.requestLocationUpdates(request,mLocationCallback,Looper.myLooper())}override fun onDestroy() {super.onDestroy()//停止获取位置更新if (mLocationCallback != null) {fusedLocationProviderClient.removeLocationUpdates(mLocationCallback)}}
到这里定位相关的功能,相信你也基本掌握啦。不过喜欢举一反三的同学,此时会想了,截图中定位蓝点图标我想换成自己的怎么办呢,以及换成自己的图标后,蓝点的方向变化又要如何处理呢?不要着急,带着你的疑问,继续看完后续的文章吧,哈哈。
地图点击事件
mGoogleMap.setOnMapClickListener { latLng: LatLng? ->Log.i(TAG, "onMapReady: 地图点击事件")}mGoogleMap.setOnMapLongClickListener { latLng ->Log.i(TAG, "onMapReady: 地图长按点击事件")}mGoogleMap.setOnMarkerClickListener(object : GoogleMap.OnMarkerClickListener {override fun onMarkerClick(mMarker: Marker?): Boolean {Log.i(TAG, "onMapReady: Marker点击事件")return false}})mGoogleMap.setOnInfoWindowClickListener { mMarker ->Log.i(TAG, "onMapReady: Marker 弹窗点击事件")}mGoogleMap.setOnPoiClickListener(object : GoogleMap.OnPoiClickListener {override fun onPoiClick(mPointOfInterest: PointOfInterest?) {Log.i(TAG, "onMapReady: Poi 点击事件")}})
参考博客:
官方文档:
https://developers.google.com/maps/documentation/android-sdk/intro
官方demo:
- android-samples
- android-places-demos
- android-maps-utils
拾取坐标系统
【谷歌地图–番外篇 android-maps-utils的使用 】
【谷歌地图--MapsSDK集成】相关推荐
- 【谷歌地图--DirectionsSDK集成】
上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...
- 【谷歌地图--集成准备】
上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...
- 可集成在XPage中的谷歌地图控件
OpenNTF推荐项目"谷歌地图控件",可集成在XPage中,支持基于坐标和基于地址两种方式. ... 内容详见可集成在XPage中的谷歌地图控件
- 图神经网络让预估到达准确率提升50%,谷歌地图实现新突破
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心报道 编辑:魔王.杜伟.小舟 公交车.出租车等交通工具的到达时间是影响公众出行的一大因素.所以,预估到达时 ...
- 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪
谷歌地图api 微信小程序 Location tracking and monitoring have seen a surge in modern application development w ...
- 谷歌地图启用全新卫星图:细节更清晰,色彩更丰富
一直以来,谷歌 地图都是一款简洁的应用,很少在新版本中添加复杂功能,但这就意味着谷歌地图什么都没有做么? 答案显然是否定的,细心的用户可能已经发现了,最近的谷歌卫星地图变得更加美观和清爽了,这一切得益 ...
- U880纯GPS定位综合解决方案,支持谷歌地图老虎地图百度地图
一,背景篇 1. 在天国,我们都是不需要谷歌服务的,所有的国行都是没有谷歌服务的.但有太多的机油觉得也许天国之外的东西不一定坏,所以我们需要谷歌服务包(GMS). 我的第一个安卓机是摩托的里程碑,水货 ...
- 如何使用谷歌地图和LightningChart创建地理空间地图图表?
LightningChart JS 是一款高性能的 JavaScript 图表工具,专注于性能密集型.实时可视化图表解决方案. LightningChart .JS | 下载试用(qun:740060 ...
- 图神经网络让谷歌地图更智能
对于公众出行领域而言,交通工具的到达时间是主要的影响因素,预估到达时间(ETA)准确率已经成为非常实际的研究课题.近日,英国人工智能公司DeepMind 与谷歌地图展开深度合作,利用图神经网络(Gra ...
最新文章
- csvtk:高效命令行版极简dplyr
- udp如何知道对方关闭_聊聊tcp和udp那些事
- php ajax loading图片居中显示,ajax+php上次图片
- centos php-mysql_centOS 下安装php和mysql
- 详解Redis的架构演化之路(附16张图解)
- Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12
- unity 2017 代码加密
- Gridview模板中提供的删除功能
- 小程序的开发框架MINA及小程序的启动机制
- Android ViewModel组件详解
- 【读书笔记】计算广告(第3部分)
- 【黑马程序员pink老师前端】HTML
- 做跨境人人都是天秤座,三个月都没能建起一个店铺
- 移动端切图内容包括什么_移动终端界面切图
- lldb +debugserver调试环境部署
- Docker镜像瘦身与优化
- java毕业设计水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw
- 无锡设计培训——做室内设计师的几点建议
- 按键自加自减的c语言数码管编程,设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。...
- 软件开发公司管理手册
热门文章
- Linux 7 (RedHatCentOS)静默安装 Oracle11.2.0.4
- 移植中文TTS(ekho)到ARM linux开发板
- 云计算如何改变好莱坞的电影特效?
- 航顺HK HK32F103CBT6 MCU
- python多线程url采集器 + github_利用Python3.5多线程抓取妹子图
- java 监控 m_Java接口响应超时监控
- 2022年宁德市职业院校教师实践教学能力提升培训——网络搭建与管理
- 程序员应该如何读好书?
- Editplus批量修改编码格式
- 消费新品周报 | TCL发布中国首款可旋转智慧大屏;麦卢卡蜂蜜品牌BEE+登陆中国...