上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性。这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助:

  1. 【谷歌地图–集成准备】
  2. 【谷歌地图–MapsSDK集成】
  3. 【谷歌地图–DirectionsSDK集成】
  4. 【谷歌地图–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集成】相关推荐

  1. 【谷歌地图--DirectionsSDK集成】

    上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...

  2. 【谷歌地图--集成准备】

    上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...

  3. 可集成在XPage中的谷歌地图控件

    OpenNTF推荐项目"谷歌地图控件",可集成在XPage中,支持基于坐标和基于地址两种方式. ... 内容详见可集成在XPage中的谷歌地图控件

  4. 图神经网络让预估到达准确率提升50%,谷歌地图实现新突破

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心报道 编辑:魔王.杜伟.小舟 公交车.出租车等交通工具的到达时间是影响公众出行的一大因素.所以,预估到达时 ...

  5. 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪

    谷歌地图api 微信小程序 Location tracking and monitoring have seen a surge in modern application development w ...

  6. 谷歌地图启用全新卫星图:细节更清晰,色彩更丰富

    一直以来,谷歌 地图都是一款简洁的应用,很少在新版本中添加复杂功能,但这就意味着谷歌地图什么都没有做么? 答案显然是否定的,细心的用户可能已经发现了,最近的谷歌卫星地图变得更加美观和清爽了,这一切得益 ...

  7. U880纯GPS定位综合解决方案,支持谷歌地图老虎地图百度地图

    一,背景篇 1. 在天国,我们都是不需要谷歌服务的,所有的国行都是没有谷歌服务的.但有太多的机油觉得也许天国之外的东西不一定坏,所以我们需要谷歌服务包(GMS). 我的第一个安卓机是摩托的里程碑,水货 ...

  8. 如何使用谷歌地图和LightningChart创建地理空间地图图表?

    LightningChart JS 是一款高性能的 JavaScript 图表工具,专注于性能密集型.实时可视化图表解决方案. LightningChart .JS | 下载试用(qun:740060 ...

  9. 图神经网络让谷歌地图更智能

    对于公众出行领域而言,交通工具的到达时间是主要的影响因素,预估到达时间(ETA)准确率已经成为非常实际的研究课题.近日,英国人工智能公司DeepMind 与谷歌地图展开深度合作,利用图神经网络(Gra ...

最新文章

  1. csvtk:高效命令行版极简dplyr
  2. udp如何知道对方关闭_聊聊tcp和udp那些事
  3. php ajax loading图片居中显示,ajax+php上次图片
  4. centos php-mysql_centOS 下安装php和mysql
  5. 详解Redis的架构演化之路(附16张图解)
  6. Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12
  7. unity 2017 代码加密
  8. Gridview模板中提供的删除功能
  9. 小程序的开发框架MINA及小程序的启动机制
  10. Android ViewModel组件详解
  11. 【读书笔记】计算广告(第3部分)
  12. 【黑马程序员pink老师前端】HTML
  13. 做跨境人人都是天秤座,三个月都没能建起一个店铺
  14. 移动端切图内容包括什么_移动终端界面切图
  15. lldb +debugserver调试环境部署
  16. Docker镜像瘦身与优化
  17. java毕业设计水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw
  18. 无锡设计培训——做室内设计师的几点建议
  19. 按键自加自减的c语言数码管编程,设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。...
  20. 软件开发公司管理手册

热门文章

  1. Linux 7 (RedHatCentOS)静默安装 Oracle11.2.0.4
  2. 移植中文TTS(ekho)到ARM linux开发板
  3. 云计算如何改变好莱坞的电影特效?
  4. 航顺HK HK32F103CBT6 MCU
  5. python多线程url采集器 + github_利用Python3.5多线程抓取妹子图
  6. java 监控 m_Java接口响应超时监控
  7. 2022年宁德市职业院校教师实践教学能力提升培训——网络搭建与管理
  8. 程序员应该如何读好书?
  9. Editplus批量修改编码格式
  10. 消费新品周报 | TCL发布中国首款可旋转智慧大屏;麦卢卡蜂蜜品牌BEE+登陆中国...