Ver código fonte

历史轨迹用百度地图的逆地址编码接口

songchengcheng 2 semanas atrás
pai
commit
3109da5fac

+ 43 - 49
app/src/main/java/com/sikey/interconnect/ui/avtivity/component/path/MDPathHistoryActivity.kt

@@ -4,7 +4,6 @@ import android.app.Activity
 import android.content.Intent
 import android.os.Bundle
 import android.os.Message
-import android.util.Log
 import android.view.Menu
 import android.view.MenuItem
 import android.view.View
@@ -17,7 +16,6 @@ import androidx.fragment.app.FragmentTransaction
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import com.android.volley.toolbox.StringRequest
 import com.baidu.mapapi.map.BaiduMap
 import com.baidu.mapapi.map.BitmapDescriptorFactory
 import com.baidu.mapapi.map.MapStatus
@@ -29,24 +27,27 @@ import com.baidu.mapapi.map.Polyline
 import com.baidu.mapapi.map.PolylineOptions
 import com.baidu.mapapi.model.LatLng
 import com.baidu.mapapi.model.LatLngBounds
+import com.baidu.mapapi.search.core.SearchResult
+import com.baidu.mapapi.search.geocode.GeoCodeResult
+import com.baidu.mapapi.search.geocode.GeoCoder
+import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener
+import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption
+import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult
 import com.sikey.interconnect.R
 import com.sikey.interconnect.app.DataManager
 import com.sikey.interconnect.app.DataManager.Companion.checkLoginResponseAndCurrentChildInfo
 import com.sikey.interconnect.component.VersionMatch.VersionMatch
 import com.sikey.interconnect.component.handler.WeakReferenceHandler
 import com.sikey.interconnect.component.log.Logger
-import com.sikey.interconnect.component.network.RequestManager
 import com.sikey.interconnect.component.network.http.HttpServiceExecutor
 import com.sikey.interconnect.component.network.http.LocationService
 import com.sikey.interconnect.component.network.http.RetrofitFactory
 import com.sikey.interconnect.component.network.http.model.HistoryLocationRepo
 import com.sikey.interconnect.component.network.http.model.Location
-import com.sikey.interconnect.constant.UrlConstants
 import com.sikey.interconnect.data.bean.PathTraceBean
 import com.sikey.interconnect.k2.entity.DateBean
 import com.sikey.interconnect.k2.ui.settings.LocationSettingActivity
 import com.sikey.interconnect.k2.utils.FormatUtils
-import com.sikey.interconnect.k2.utils.TextUtils
 import com.sikey.interconnect.ui.adapter.DateAdapter
 import com.sikey.interconnect.ui.avtivity.base.BaseNoActionBarActivity
 import com.sikey.interconnect.ui.fragment.path.TrackSeekBarFragment
@@ -55,9 +56,6 @@ import com.sikey.interconnect.utils.ToastUtils
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
-import org.json.JSONArray
-import org.json.JSONException
-import org.json.JSONObject
 import java.text.SimpleDateFormat
 import java.util.Calendar
 import java.util.Date
@@ -104,7 +102,6 @@ class MDPathHistoryActivity : BaseNoActionBarActivity(), View.OnClickListener,
         //val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
         mMapView =  findViewById(R.id.bmapView)
         map = mMapView?.map
-        setMapLoadFinishFlag(true)
         map?.mapType = BaiduMap.MAP_TYPE_NORMAL
         map?.uiSettings?.isRotateGesturesEnabled = false
         val mapStatus = MapStatus.Builder().zoom(16f).build()
@@ -609,7 +606,6 @@ class MDPathHistoryActivity : BaseNoActionBarActivity(), View.OnClickListener,
     }
 
     private fun getGeoAdress() {
-        Logger.d(TAG, "getGeoAdress")
         if (mCurrentBeanList == null || mCurrentBeanList!!.isEmpty() || mCurrentBeanList!!.size < mCurrentProgress || mCurrentProgress < 1) {
             return
         }
@@ -617,47 +613,45 @@ class MDPathHistoryActivity : BaseNoActionBarActivity(), View.OnClickListener,
             //mCurrentMarker!!.remove()
         }
         val bean = mCurrentBeanList!![mCurrentProgress - 1]
-        val latlng = bean.lat + "," + bean.lng
-        Log.d(
-            TAG,
-            "url = " + UrlConstants.GOOGLE_GEO_ADRESS + "?latlng=" + latlng + getString(R.string.param_google_maps_key)
-        )
-        val request = StringRequest(
-            UrlConstants.GOOGLE_GEO_ADRESS + "?latlng=" + latlng + getString(R.string.param_google_maps_key),
-            { response ->
-                try {
-//                    Log.d(TAG, "response=$response")
-                    val jsonObject = JSONObject(response)
-                    val status = jsonObject.getString("status")
-                    Log.d(TAG, "status=$status")
-                    if ("OK" == status) {
-                        val results = jsonObject.getString("results")
-                        val jsonArray = JSONArray(results)
-                        val length = jsonArray.length()
-                        Logger.d(TAG, "jsonArray.length(): " + jsonArray.length())
-                        for (i in 0 until length) {
-                            val jsonObject2 = jsonArray.getJSONObject(i)
-                            val formatted_address = jsonObject2.getString("formatted_address")
-                            Logger.i(TAG, "formatted_address: $formatted_address")
-                            if (i == 0) {
-
-                                var mAddressStr = formatted_address
-                                if (TextUtils.isEmpty(mAddressStr)) {
-                                    mAddressStr = resources.getString(R.string.locating_tip)
-                                }
-                                mTrackSeekBarFrag?.setAddress(mAddressStr)
-                                break
-                            }
-                        }
-                    }
-                } catch (e: JSONException) {
-                    e.printStackTrace()
+        val geoCoder = GeoCoder.newInstance()
+        geoCoder.setOnGetGeoCodeResultListener(object : OnGetGeoCoderResultListener {
+            override fun onGetGeoCodeResult(result: GeoCodeResult?) {
+                if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
+                    Logger.d(TAG, "地理编码失败: ${result?.error}")
+                    return
                 }
-            }) { error ->
-            Logger.i(TAG, "add err==" + error.message)
-            /* ToastUtils.showLongToast(R.string.network_exception) */
+                val latLng = result.location
+                val address = result.address
+                Logger.d(TAG, "地理编码结果: 地址=$address, 经纬度=$latLng")
+            }
+
+            override fun onGetReverseGeoCodeResult(result: ReverseGeoCodeResult?) {
+                if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
+                    Logger.e(TAG, "逆地理编码失败: ${result?.error}")
+                    return
+                }
+                // 获取逆地理编码结果
+                val address = result.address
+                val poiList = result.poiList
+                Logger.d(TAG, "逆地理编码结果: 地址=$address, 格式化地址=${result.formattedPoiAddress}, 附近POI=$poiList")
+                if (result.error == SearchResult.ERRORNO.NO_ERROR) {
+                    result.formattedPoiAddress?.let { mTrackSeekBarFrag?.setAddress(it) }
+                    setMapLoadFinishFlag(true)
+                }
+            }
+        })
+
+        val latLng = LatLng(
+            bean.lat.toDouble(), bean.lng.toDouble())
+
+        // 发起逆地理编码请求
+        latLng.let {
+            val reverseGeoCodeOption = ReverseGeoCodeOption()
+                .location(it)
+                .radius(200)
+                .newVersion(1)
+            geoCoder.reverseGeoCode(reverseGeoCodeOption)
         }
-        RequestManager.getInstance(this).addToRequestQueue(request)
     }
 
     private var inited = false