【谷歌地图--PlacesSDK集成】
上網(wǎng)查了一些資料發(fā)現(xiàn)有關(guān)谷歌地圖sdk集成的文章還是不少的,但是都缺乏系統(tǒng)性。這里做些系統(tǒng)整理,主要分以下篇幅講解,希望對(duì)初始谷歌地圖的你有所幫助:
開(kāi)始正文啦:
由于眾所周知的的原因,集成谷歌地圖sdk前首先你的pc端和移動(dòng)端都是要翻墻的,不然后續(xù)的一些功能你都無(wú)法操作。
谷歌地圖–PlacesSDK集成
開(kāi)始正文之前,我們這里先做個(gè)說(shuō)明哈:集成 Places 功能時(shí),也是需要你的google地圖開(kāi)發(fā)者賬號(hào)啟用計(jì)費(fèi)功能。
依賴添加
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)}}}當(dāng)前位置獲取附近地點(diǎn)
效果圖:
關(guān)鍵代碼:
地點(diǎn)搜索
官方搜索組件
效果圖:
關(guān)鍵代碼:
ps:很顯然我們這里啟動(dòng)了一個(gè)活動(dòng),然后我們?cè)趏nActivityResult中獲取結(jié)果值:
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)}自定義搜索布局
關(guān)鍵代碼:
ps:正在補(bǔ)充中…
搜索附近地點(diǎn)
效果圖:
和獲取路線信息一樣,搜索附近點(diǎn)也是一個(gè)http請(qǐng)求:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=36.70686554888466,119.17656641453506&radius=1500&key=your_api_kay關(guān)鍵代碼:
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") //搜索結(jié)果期望的類型,例如:超市,咖啡館,學(xué)校等等 https://developers.google.cn/places/web-service/supported_types// .addParam("keyword", "cruise")//搜索結(jié)果期望包含的關(guān)鍵字.addParam("language", "zh-CN").addParam("key", Config.API_KAY).request(object : ACallback<NearbyModel?>() {override fun onSuccess(mBean: NearbyModel?) {//請(qǐng)求成功,AuthorModel為解析服務(wù)器返回?cái)?shù)據(jù)的對(duì)象,可以是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) {//請(qǐng)求失敗,errCode為錯(cuò)誤碼,errMsg為錯(cuò)誤描述Log.i(TAG, " errCode=${errCode} errMsg=$errMsg")}})}獲取地點(diǎn)和照片相關(guān)信息
關(guān)鍵代碼:
//根據(jù)placeId,可以獲取 地點(diǎn) 和 照片 等相關(guān)信息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 = "評(píng)分:${response.place.rating} 總評(píng)分:${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")}}說(shuō)明:篇幅有限,文章中也只是貼出了關(guān)鍵代碼。完整項(xiàng)目源碼請(qǐng)點(diǎn)擊這里:
項(xiàng)目源碼地址
參考博客:
官方文檔:
https://developers.google.com/maps/documentation/directions/overview
官方demo:
- android-samples
- android-places-demos
- android-maps-utils
拾取坐標(biāo)系統(tǒng)
【谷歌地圖–番外篇 android-maps-utils的使用 】
總結(jié)
以上是生活随笔為你收集整理的【谷歌地图--PlacesSDK集成】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python - 安装sentencep
- 下一篇: socket网络通信实现与优化