日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【谷歌地图--PlacesSDK集成】

發布時間:2023/12/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【谷歌地图--PlacesSDK集成】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上網查了一些資料發現有關谷歌地圖sdk集成的文章還是不少的,但是都缺乏系統性。這里做些系統整理,主要分以下篇幅講解,希望對初始谷歌地圖的你有所幫助:

  • 【谷歌地圖–集成準備】
  • 【谷歌地圖–MapsSDK集成】
  • 【谷歌地圖–DirectionsSDK集成】
  • 【谷歌地圖–PlacesSDK集成】
  • 開始正文啦:

    由于眾所周知的的原因,集成谷歌地圖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)}}}

    當前位置獲取附近地點

    效果圖:

    關鍵代碼:

    // 使用字段定義要返回的數據類型.val placeFields = listOf(Place.Field.NAME, Place.Field.ADDRESS, Place.Field.LAT_LNG)// Use the builder to create a FindCurrentPlaceRequest.val request = FindCurrentPlaceRequest.newInstance(placeFields)// 獲取可能的位置-即與設備當前位置最匹配的商家和其他興趣點。val placeResult = placesClient.findCurrentPlace(request)placeResult.addOnCompleteListener { task ->if (task.isSuccessful && task.result != null) {val likelyPlaces = task.result} else {Log.e(TAG, "Exception: %s", task.exception)}}

    地點搜索

    官方搜索組件

    效果圖:

    關鍵代碼:

    val query = "濰坊";val countries = listOf("CN", "JP", "US");//國家/地區(例如CH,US,RO)val locationBias: LocationBias? = null //設置位置偏差lateinit var locationRestriction: LocationRestriction //設置位置限制private fun placeSearch() {//val bounds = StringUtil.convertToLatLngBounds("", "")!!//locationRestriction = RectangularBounds.newInstance(bounds)//獲取所有信息placeFields = listOf(*Place.Field.values())//AutocompleteActivityMode.OVERLAYval autocompleteIntent =Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, placeFields).setInitialQuery(query).setHint("請輸入您要搜索的內容").setCountries(countries)//.setLocationBias(locationBias)//.setLocationRestriction(locationRestriction)//.setTypeFilter(TypeFilter.ADDRESS) //設置類型過濾器.build(this)startActivityForResult(autocompleteIntent, AUTOCOMPLETE_REQUEST_CODE)}

    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集成】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。