【谷歌地图--PlacesSDK集成】
生活随笔
收集整理的这篇文章主要介绍了
【谷歌地图--PlacesSDK集成】
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性。这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助:
开始正文啦:
由于众所周知的的原因,集成谷歌地图sdk前首先你的pc端和移动端都是要翻墙的,不然后续的一些功能你都无法操作。
谷歌地图–PlacesSDK集成
开始正文之前,我们这里先做个说明哈:集成 Places 功能时,也是需要你的google地图开发者账号启用计费功能。
依赖添加
implementation 'com.google.android.libraries.places:places:2.4.0'初始化:
public class InitApplication : Application() {override fun onCreate() {super.onCreate()ViseHttp.init(this);if (!Places.isInitialized()) {Places.initialize(applicationContext, Config.API_KAY)}}}当前位置获取附近地点
效果图:
关键代码:
地点搜索
官方搜索组件
效果图:
关键代码:
ps:很显然我们这里启动了一个活动,然后我们在onActivityResult中获取结果值:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (requestCode == AUTOCOMPLETE_REQUEST_CODE && data != null) {when (resultCode) {AutocompleteActivity.RESULT_OK -> {val place = Autocomplete.getPlaceFromIntent(data!!)val result = StringUtil.stringifyAutocompleteWidget(place, true)Log.i(TAG, "onActivityResult: result=${result}")//Toast.makeText(this, "${result}", Toast.LENGTH_LONG).show()mGoogleMap!!.addMarker(MarkerOptions().position(place.latLng!!).title(place.name).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)).snippet(place.address))val viewport = place.viewportmGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(viewport, 50))// Log.i(TAG, "onActivityResult: data=${data!!.extras.toString()}")}AutocompleteActivity.RESULT_ERROR -> {val status = Autocomplete.getStatusFromIntent(data)Log.i(TAG, "onActivityResult: status.statusMessage=${status.statusMessage}")}AutocompleteActivity.RESULT_CANCELED -> {// The user canceled the operation.}}}super.onActivityResult(requestCode, resultCode, data)}自定义搜索布局
关键代码:
ps:正在补充中…
搜索附近地点
效果图:
和获取路线信息一样,搜索附近点也是一个http请求:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=36.70686554888466,119.17656641453506&radius=1500&key=your_api_kay关键代码:
private fun getNearbyPlace(mLatLng: LatLng) {ViseHttp.GET("place/nearbysearch/json").tag(TAG).addParam("location", "${mLatLng.latitude},${mLatLng.longitude}").addParam("radius", "1000") //半径1000 米//.addParam("type", "restaurant") //搜索结果期望的类型,例如:超市,咖啡馆,学校等等 https://developers.google.cn/places/web-service/supported_types// .addParam("keyword", "cruise")//搜索结果期望包含的关键字.addParam("language", "zh-CN").addParam("key", Config.API_KAY).request(object : ACallback<NearbyModel?>() {override fun onSuccess(mBean: NearbyModel?) {//请求成功,AuthorModel为解析服务器返回数据的对象,可以是String,按需定义即可// Log.i(TAG, " mBeanStr=${mBean}")if (mBean!!.status == "OK") {val resultList = mBean.resultsval name = resultList[0].nameLog.i(TAG, "onSuccess: name=> $name")mNearbyPlaceAdapter.setNewData(resultList)} else {Log.i(TAG, " errCode=${mBean!!.status}")}}override fun onFail(errCode: Int, errMsg: String) {//请求失败,errCode为错误码,errMsg为错误描述Log.i(TAG, " errCode=${errCode} errMsg=$errMsg")}})}获取地点和照片相关信息
关键代码:
//根据placeId,可以获取 地点 和 照片 等相关信息private fun getPlaceInfo(placeId: String) {val argsd = arrayOf("1", "2", "3")val argsd1 = arrayOf(1, 2, 3)//获取所有信息//placeFields = listOf(*Place.Field.values())val request = FetchPlaceRequest.newInstance(placeId, placeFields)val placeTask = placesClient.fetchPlace(request)placeTask.addOnSuccessListener { response: FetchPlaceResponse ->Log.i(TAG, "getPlaceInfo: addOnSuccessListener response=$response")val address = response.place.addressval name = response.place.nameval latLng = response.place.latLngLog.i(TAG, "getPlaceInfo: addOnSuccessListener address=$address")//Toast.makeText(this, "${response}", Toast.LENGTH_LONG).show()selectMarker = mGoogleMap!!.addMarker(MarkerOptions().position(latLng!!).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)))selectMarker!!.title = "$name"selectMarker!!.snippet = "评分:${response.place.rating} 总评分:${response.place.userRatingsTotal}"selectMarker!!.showInfoWindow()// responseView.text = StringUtil.stringify(response, isDisplayRawResultsChecked)}placeTask.addOnFailureListener { exception: Exception ->exception.printStackTrace()Log.i(TAG, "getPlaceInfo: exception.message=${exception.message}")}placeTask.addOnCompleteListener {Log.i(TAG, "getPlaceInfo: addOnCompleteListener")}}说明:篇幅有限,文章中也只是贴出了关键代码。完整项目源码请点击这里:
项目源码地址
参考博客:
官方文档:
https://developers.google.com/maps/documentation/directions/overview
官方demo:
- android-samples
- android-places-demos
- android-maps-utils
拾取坐标系统
【谷歌地图–番外篇 android-maps-utils的使用 】
总结
以上是生活随笔为你收集整理的【谷歌地图--PlacesSDK集成】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Python - 安装sentencep
- 下一篇: socket网络通信实现与优化