package com.xianning.driver.ui.main.add_order
|
|
import android.content.Context
|
import android.graphics.Color
|
import android.os.Bundle
|
import android.util.Log
|
import cn.sinata.xldutils.utils.clickDelay
|
import com.baidu.mapapi.map.*
|
import com.baidu.mapapi.model.LatLng
|
import com.baidu.mapapi.model.LatLngBounds
|
import com.baidu.mapapi.search.core.SearchResult
|
import com.baidu.mapapi.search.district.OnGetDistricSearchResultListener
|
import com.baidu.mapapi.search.geocode.*
|
import com.baidu.mapapi.search.poi.*
|
import com.xianning.driver.R
|
import com.xianning.driver.base.BaseEvent
|
import com.xianning.driver.base.MyBaseActivity
|
import com.xianning.driver.base.gaode.AMapKit
|
import com.xianning.driver.bean.DistrictQueryBean
|
import com.xianning.driver.bean.QueryPositionBean
|
import com.xianning.driver.netUtls.Api
|
import com.xianning.driver.netUtls.callNet
|
import com.xianning.driver.netUtls.createView
|
import com.xianning.driver.netUtls.getMapByAny
|
import kotlinx.android.synthetic.main.activity_select_start_point.*
|
import org.greenrobot.eventbus.EventBus
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.toast
|
|
|
/**
|
* @ClassName SelectStartPointActivity
|
* @Description 选择起点 选择终点
|
* @Author Administrator
|
* @Date 2020/10/8 16:00
|
* @Version 1.0
|
*/
|
class SelectStartPointActivity : MyBaseActivity() {
|
|
val endCityId by lazy {
|
intent.getStringExtra("endCityId")
|
}
|
|
val startCityId by lazy {
|
intent.getStringExtra("startCityId")
|
}
|
|
val name by lazy {
|
intent.getStringExtra("name")
|
}
|
|
|
var map: BaiduMap? = null
|
|
var marker: Marker? = null
|
|
var currentPosition: LatLng? = null
|
|
var currentSiteStr: String = ""
|
|
override fun setContentView() {
|
setContentView(R.layout.activity_select_start_point)
|
}
|
|
override fun initView() {
|
if (!startCityId.isNullOrEmpty()) {
|
setTitleText("选择起点")
|
} else {
|
setTitleText("选择终点")
|
}
|
tv_city_name.text = ""
|
callDistrict()
|
|
tv_sure.clickDelay {
|
if (currentPosition == null){
|
toast("加载中请稍等...")
|
return@clickDelay
|
}
|
AMapKit.getAddress(
|
this,
|
currentPosition!!.latitude,
|
currentPosition!!.longitude
|
) { adcode ->
|
if (adcode.isNullOrEmpty()){
|
toast("查询失败,请重试")
|
return@getAddress
|
}
|
var map = getMapByAny()
|
map["code"] = adcode
|
map["lonLat"] = currentPosition!!.longitude.toString() + "," + currentPosition!!.latitude.toString()
|
map["siteId"] = if (startCityId.isNullOrEmpty()) endCityId else startCityId
|
callNet(Api.areaMonitoring, map) {
|
var bean = gson.fromJson<QueryPositionBean>(it, QueryPositionBean::class.java)
|
if (bean.data == -1){
|
toast("您选择的地址不在服务范围内")
|
return@callNet
|
}else{
|
currentPosition?.let {
|
EventBus.getDefault().post(
|
BaseEvent(
|
BaseEvent.SELECT_POINT_SITE_DETAIL,
|
currentSiteStr,
|
currentPosition!!.latitude.toString(),
|
it.longitude.toString()
|
)
|
)
|
onBackPressed()
|
}
|
}
|
|
}
|
}
|
}
|
}
|
|
private fun moveLisener() {
|
Log.e("ljqxs", "121:==")
|
AMapKit.addMapMoveListener(map!!, marker!!) { position ->
|
// AMapKit.getAddressReg(this,position.latitude,position.longitude){
|
// if (!it.aois.isNullOrEmpty()){
|
// currentPosition = position
|
// if(!isSelectFirst){
|
// tv_site.text = it.district
|
// tv_site_detail.text = it.aois[0].aoiName
|
// }else{
|
// isSelectFirst = false
|
// }
|
// currentSiteStr = tv_site.text.toString() + tv_site_detail.text.toString()
|
// dismissDialog()
|
// }
|
// }
|
|
Log.e("ljqxs", "MoveListener:position${position.latitude},${position.longitude}")
|
|
AMapKit.searchPoint(
|
this,
|
position.latitude,
|
position.longitude,
|
object : OnGetPoiSearchResultListener {
|
override fun onGetPoiResult(p0: PoiResult?) {
|
Log.e("ljqxs", "154:结果${p0},${p0?.allPoi?.size}")
|
p0?.apply {
|
if (!allPoi.isNullOrEmpty()) {
|
tv_city_name.text = allPoi[0].city
|
currentPosition = LatLng(
|
allPoi[0].location.latitude,
|
allPoi[0].location.longitude
|
)
|
if (!isSelectFirst) {
|
Log.e("ljqxs", "162:结果${allPoi[0].address}")
|
tv_site.text = allPoi[0].name
|
tv_site_detail.text = allPoi[0].address
|
} else {
|
isSelectFirst = false
|
}
|
currentSiteStr =
|
tv_site.text.toString() + tv_site_detail.text.toString()
|
dismissDialog()
|
}
|
}
|
}
|
|
override fun onGetPoiDetailResult(p0: PoiDetailResult?) {
|
Log.e("ljqxs", "172:onGetPoiDetailResult${p0}")
|
}
|
|
override fun onGetPoiDetailResult(p0: PoiDetailSearchResult?) {
|
Log.e("ljqxs", "172:onGetPoiDetailResult${p0}")
|
}
|
|
override fun onGetPoiIndoorResult(p0: PoiIndoorResult?) {
|
Log.e("ljqxs", "172:onGetPoiIndoorResult${p0}")
|
}
|
|
})
|
}
|
}
|
|
private fun callDistrict() {
|
var map = getMapByAny()
|
map["siteId"] = if (startCityId.isNullOrEmpty()) endCityId else startCityId
|
callNet(Api.queryLocation, map) {
|
var bean = gson.fromJson<DistrictQueryBean>(it, DistrictQueryBean::class.java)
|
for (item in bean.data) {
|
if (item.type == 1) { // integer($int32) 区域类型(1=行政区域,2=电子围栏)
|
var contentStr = ""
|
if (item.province.isNotEmpty()) {
|
contentStr = item.province
|
}
|
if (item.city.isNotEmpty()) {
|
contentStr = item.city
|
}
|
if (item.district.isNotEmpty()) {
|
contentStr = item.district
|
}
|
searchName(item.city, item.district)
|
} else {
|
addPointList(item.coordinate)
|
}
|
}
|
}
|
}
|
|
private fun addPointList(coordinate: String) {
|
var latAll = coordinate.split(";")
|
if (latAll.size > 2){
|
var allLat = mutableListOf<LatLng>()
|
for (item in latAll) {
|
var point = item.split(",")
|
if (point.size == 2) {
|
var lat = LatLng(point[1].toDouble(), point[0].toDouble())
|
allLat.add(lat)
|
}
|
}
|
AMapKit.drawFace(this, map!!, allLat)
|
if (allLat.size > 0){
|
addMk(LatLng(allLat[0].latitude, allLat[0].longitude))
|
marker?.let {
|
it.position = LatLng(allLat[0].latitude, allLat[0].longitude)
|
AMapKit.moveCamera(map!!, it.position)
|
}
|
}
|
// AMapKit.drawFenceByPoint(this, allPoint, GeoFenceListener { p0, p1, p2 ->
|
// if (p1 == GeoFence.ADDGEOFENCE_SUCCESS) {
|
// for (item in p0) {
|
// for (itemP in item.pointList) {
|
// }
|
// }
|
// }
|
// })
|
}
|
if (latAll.size == 2){
|
var point = latAll[0].split(",")
|
var dpoint = LatLng(point[1].toDouble(), point[0].toDouble())
|
AMapKit.drawCricle(this, map!!, dpoint, latAll[1].toDouble())
|
AMapKit.moveCamera(map!!, dpoint)
|
addMk(LatLng(dpoint.latitude, dpoint.longitude))
|
marker?.let {
|
it.position = LatLng(dpoint.latitude, dpoint.longitude)
|
AMapKit.moveCamera(map!!, it.position)
|
}
|
}
|
|
}
|
|
fun searchName(city: String?, district: String?) {
|
AMapKit.drawFenceByCity(
|
this,
|
city,
|
district,
|
OnGetDistricSearchResultListener { districtResult ->
|
//获取边界坐标点,并展示
|
val polyLines = districtResult.getPolylines()
|
if (polyLines != null) {
|
val builder = LatLngBounds.Builder()
|
for (polyline in polyLines!!) {
|
val ooPolyline11: OverlayOptions = PolylineOptions().width(1)
|
.points(polyline).dottedLine(true).color(Color.RED)
|
map?.addOverlay(ooPolyline11)
|
val ooPolygon: OverlayOptions = PolygonOptions().points(polyline)
|
.stroke(Stroke(1, Color.RED)).fillColor(0x1A000000)
|
map?.addOverlay(ooPolygon)
|
for (latLng in polyline) {
|
builder.include(latLng)
|
}
|
if (polyline.size > 0) {
|
Log.e(
|
"ljqxs",
|
"searchName:${city},结果${polyline[polyline.size / 2].latitude},${polyline[polyline.size / 2].longitude}"
|
)
|
addMk(
|
LatLng(
|
polyline[polyline.size / 2].latitude,
|
polyline[polyline.size / 2].longitude
|
)
|
)
|
AMapKit.moveCamera(
|
map!!, LatLng(
|
polyline[polyline.size / 2].latitude,
|
polyline[polyline.size / 2].longitude
|
)
|
)
|
|
}
|
}
|
map?.setMapStatus(
|
MapStatusUpdateFactory
|
.newLatLngBounds(builder.build())
|
)
|
}
|
})
|
}
|
|
fun addMk(lat: LatLng){
|
Log.e("ljqxs", "LatLng:结果${lat.latitude},${lat.longitude}")
|
if (marker == null){
|
var view = createView(R.layout.item_map_point, this)
|
marker = AMapKit.addMarker(map!!, lat.latitude, lat.longitude, view, "12") as Marker
|
currentPosition = marker?.position
|
moveLisener()
|
getAddress(this, currentPosition!!.latitude, currentPosition!!.longitude){
|
tv_city_name.text = it
|
}
|
}
|
}
|
|
/***
|
* 逆地址编码
|
*/
|
fun getAddress(context: Context, lat: Double, lon: Double, function: (String) -> Unit) {
|
val mCoder = GeoCoder.newInstance()
|
val listener = object: OnGetGeoCoderResultListener {
|
override fun onGetGeoCodeResult(p0: GeoCodeResult?) {
|
|
}
|
|
override fun onGetReverseGeoCodeResult(reverseGeoCodeResult: ReverseGeoCodeResult?) {
|
if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
|
//没有找到检索结果
|
function("")
|
} else {
|
function(reverseGeoCodeResult.addressDetail.city)
|
}
|
}
|
|
}
|
mCoder.setOnGetGeoCodeResultListener(listener)
|
mCoder.reverseGeoCode(
|
ReverseGeoCodeOption()
|
.location(LatLng(lat, lon)) // 设置是否返回新数据 默认值0不返回,1返回
|
.newVersion(1) // POI召回半径,允许设置区间为0-1000米,超过1000米按1000米召回。默认值为1000
|
.radius(500)
|
)
|
}
|
|
|
override fun setOnclick() {
|
iv_reset_map.clickDelay {
|
if (currentPosition!=null)
|
AMapKit.moveCamera(map!!, currentPosition!!)
|
}
|
|
tv_search.setOnClickListener {
|
startActivity<SearchSiteActivity>(
|
"currentCityName" to tv_city_name.text.toString(),
|
"type" to if (!startCityId.isNullOrEmpty()) "1" else "2"
|
)
|
}
|
}
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
map = AMapKit.initMap(savedInstanceState, map_view)
|
}
|
|
override fun onEventMainThread(event: BaseEvent?) {
|
super.onEventMainThread(event)
|
when (event!!.code) {
|
BaseEvent.SELECT_SEARCH_SITE -> {
|
isSelectFirst = true
|
var list = event!!.msgthree.split(",")
|
if (list.size == 2) {
|
tv_site.text = list[0]
|
tv_site_detail.text = list[1]
|
}
|
showDialog()
|
AMapKit.moveCamera(map!!, LatLng(event.msg.toDouble(), event.msgTwo.toDouble()))
|
}
|
}
|
}
|
|
var isSelectFirst = false
|
|
}
|