lmw
2023-06-20 7e4a923b472a1ffb9d6deeb80302551ba4178ca3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package com.fanghua.driver.ui.main.add_order
 
import android.content.Intent
import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.net.utils.ResultException
import cn.sinata.xldutils.utils.clickDelay
import cn.sinata.xldutils.utils.setTextChange
import com.amap.api.services.core.LatLonPoint
import com.amap.api.services.help.Inputtips
import com.amap.api.services.help.Tip
import com.amap.api.services.poisearch.PoiResult
import com.amap.api.services.poisearch.PoiSearch
 
import com.fanghua.driver.R
import com.fanghua.driver.base.BaseEvent
import com.fanghua.driver.base.MyApplication
import com.fanghua.driver.base.MyBaseActivity
import com.fanghua.driver.base.gaode.AMapKit
import com.fanghua.driver.ui.adapter.SearchSitedapter
import com.fanghua.driver.utils.Cache.CacheKey
import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers
import io.reactivex.subscribers.DisposableSubscriber
import kotlinx.android.synthetic.main.activity_search_site.*
import org.greenrobot.eventbus.EventBus
 
/**
 * @ClassName SearchSiteActivity
 * @Description 搜索地点
 * @Author Administrator
 * @Date 2020/10/9 10:09
 * @Version 1.0
 */
class SearchSiteActivity: MyBaseActivity() {
 
    val siteSearchAdapter by lazy {
        SearchSitedapter()
    }
 
    val type by lazy {
        intent.getStringExtra("type") //1起点 2终点
    }
 
    private val LogTag = "SearchSiteActivity==========》"
 
    override fun setContentView() {
        setContentView(R.layout.activity_search_site)
    }
 
    override fun initView() {
        setTitleText(if (type == "1") "选择起点" else {
            tv_search.hint = "请输入终点"
            "选择终点"
        })
 
        recycler_view_site.layoutManager = LinearLayoutManager(this)
        recycler_view_site.adapter = siteSearchAdapter
        getPoi()
    }
 
    override fun setOnclick() {
        tv_search.setTextChange {
            if (it.isNotEmpty()){
                AMapKit.searchSite(this,it,MyApplication.aMapLocation?.city?:"",
                    Inputtips.InputtipsListener { p0, p1 ->
                        if (!p0.isNullOrEmpty()){
                            siteSearchAdapter.data.clear()
                            siteSearchAdapter.data.addAll(siteSearchAdapter.setDateSite(p0))
                            siteSearchAdapter.notifyDataSetChanged()
                        }
                    })
            }
        }
 
        siteSearchAdapter.setOnItemClickListener { view, position ->
//            CacheKey.saveSiteList(siteSearchAdapter.data[position],type)  //不保存历史
            val intent = Intent()
            intent.putExtra("name",siteSearchAdapter.data[position].site)
                .putExtra("lat",siteSearchAdapter.data[position].lat)
                .putExtra("lon",siteSearchAdapter.data[position].lng)
            setResult(RESULT_OK,intent)
            finish()
        }
 
        tv_clear.clickDelay {
            CacheKey.putKeyStr("searchSite","")
            siteSearchAdapter.data.clear()
            siteSearchAdapter.notifyDataSetChanged()
        }
    }
 
    /**
     *   获取poi信息
     */
    private var poiSearchDisposable: DisposableSubscriber<PoiResult>? = null
    fun getPoi() {
        if (MyApplication.aMapLocation == null) {
            return
        }
        //如果上一次还没处理完,取消订阅
        if (poiSearchDisposable != null && !poiSearchDisposable!!.isDisposed) {
            poiSearchDisposable?.dispose()
        }
        poiSearchDisposable = object : DisposableSubscriber<PoiResult>() {
            override fun onComplete() {
 
            }
 
            override fun onNext(t: PoiResult?) {
                val address = if (t != null) {
                    if (t.pois.isNotEmpty()) {
                        t.pois[0].title
                    } else {
                        null
                    }
                } else {
                    null
                }
                if (t != null)
                    runOnUiThread {
                        t.pois.sortBy { it.distance }
                        siteSearchAdapter.data.addAll(t.pois.map {
                            val bean = SearchSitedapter.SiteBean()
                            bean.site = it.title
                            bean.siteDetail = it.snippet
                            bean.lat = it.latLonPoint.latitude
                            bean.lng = it.latLonPoint.longitude
                            bean
                        })
                        siteSearchAdapter.notifyDataSetChanged()
                    }
            }
 
            override fun onError(t: Throwable?) {
                Log.e("LogTag","周边获取失败:${t?.message}")
            }
        }
        val query = PoiSearch.Query("", "190000", "")
        val poiSearch = PoiSearch(this, query)
        poiSearch.bound = PoiSearch.SearchBound(LatLonPoint(MyApplication.aMapLocation!!.latitude, MyApplication.aMapLocation!!.longitude), 100)
        Flowable.just(poiSearch).subscribeOn(Schedulers.io()).flatMap {
            try {
                val result = poiSearch.searchPOI()
                if (result == null) {
                    Flowable.error(ResultException(""))
                } else
                    Flowable.just(result)
            } catch (e: Exception) {
                e.printStackTrace()
                Flowable.error<PoiResult>(e)
            }
        }.subscribe(poiSearchDisposable)
    }
}