【谷歌地图--MapsSDK集成】

news/2024/11/29 2:40:27/

上网查了一些资料发现有关谷歌地图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的使用 】


http://www.ppmy.cn/news/543281.html

相关文章

如何加载全国8000G离线谷歌卫星地图并进行标注

最近遇到很多朋友需要使用加载离线地图到微图内进行使用&#xff0c;既然是加载离线地图&#xff0c;今天就给大家一口气加载全国8000G一到十九级的谷歌卫星地图离线数据到微图内。没错&#xff0c;谷歌卫星地图&#xff01;没错&#xff0c;全国8000G&#xff01;没错&#xf…

HD-map:大话高精地图和语义地图

小哥哥我最近又在一家无人驾驶公司实习了&#xff0c;主攻高精地图、语义地图方向&#xff0c;今天为大家讲一讲我阅读各大媒体科技板块、各个技术科普公众号、看过各无人驾驶公司流出视频进行反推&#xff0c;以及自身日常工作接触任务后&#xff0c;对高精地图是什么这个问题…

在 ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图。

在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图。 Adding sogou map or google map in ArcGIS Engine application WebmapLayer.dll是一个基于ArcEngine和C#语言开发的程序集&#xff08;类库&#xff09;&#xff0c;该程序集主要包含GoogleMapLayer和SogouMapLayer两个类…

职场

职场少走弯路的十条忠告 一 买个闹钟&#xff0c;以便按时叫醒你。贪睡和不守时&#xff0c;都将成为你工作和事业上的绊脚石&#xff0c;任何时候都一样。不仅要学会准时&#xff0c;更要学会提前。就如你坐车去某地&#xff0c;沿途的风景很美&#xff0c;你忍不住下车看一看…

新概念英语第三册 阅读

新概念英语第三册 Lesson1 A puma at large Pumas are large, cat-like animals which are found in America. When reports came into London Zoo that a wild puma had been spotted forty-five miles south of London, they were not taken seriously. However, as the e…

计算机综述(computer overview)

翻译刘艺《计算机英语》 Unit01_SectionA_Computer_Overview 一、介绍 计算机是一种能接收一套指令或者程序&#xff0c;然后通过数值计算以及处理资源的其他部分来执行这个程序的电子设备。 没有计算机的发展&#xff0c;就不会有现在的这个高科技时代。我们能发现不同种类和…

Mac5款高效实用软件,值得推荐

目录 1.MarginNote 3&#xff1a;阅读批注学习笔记软件 2.iShot&#xff1a;Mac截图、长截图、带壳截图、贴图、标注、取色、录屏、录音、OCR、翻译&#xff0c;合集工具 3.KeyCastr-实时显示按下的按键 4.MindNode-超美观的思维导图 5.One Switch&#xff1a;系统设置一键…

16.拓扑排序与欧拉图

一、拓扑排序 1.简介 拓扑排序的英文名是 Topological sorting。拓扑排序要解决的问题是给一个图的所有节点排序&#xff0c;目标是将所有节点排序&#xff0c;使得排在前面的节点不能依赖于排在后面的节点。 在一个 D A G DAG DAG&#xff08;有向无环图&#xff09;中&…