【谷歌地图--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网络通信实现与优化