1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 高德地图 搜索定位以及自由滑动地图展示周边位置信息

高德地图 搜索定位以及自由滑动地图展示周边位置信息

时间:2018-07-07 01:59:08

相关推荐

高德地图 搜索定位以及自由滑动地图展示周边位置信息

emmmm,高德好用

先上些图

搜索出来周围的地址,点击之后,利用正地理编码搜索获取经纬度

效果图![这里写图片描述](https://img-/0706101052576?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODAyNDMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)初始化地图的工具类object InitAmap {fun initAmap(aMap: AMap, locationSource: (LocationSource.OnLocationChangedListener?) -> Unit,marker: (Marker) -> Boolean) {aMap.uiSettings.isZoomControlsEnabled = false// 设置地图默认的指南针是否显示aMap.uiSettings.isCompassEnabled = false// 设置定位监听aMap.setLocationSource(object : LocationSource {override fun deactivate() {}override fun activate(p0: LocationSource.OnLocationChangedListener?) {locationSource(p0)}})// 设置默认定位按钮是否显示aMap.uiSettings.isMyLocationButtonEnabled = false// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是falseaMap.isMyLocationEnabled = true// aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE)aMap.setOnMarkerClickListener {marker(it)}}}

然后布局代码 activity_map_search

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.amap.api.maps.MapView android:id="@+id/map_ams"android:layout_width="match_parent"android:layout_height="match_parent"></com.amap.api.maps.MapView><android.support.v7.widget.RecyclerView android:id="@+id/rlv_search_ams"android:background="@color/colorWhite"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:paddingBottom="12dp"></android.support.v7.widget.RecyclerView><!-- android:imeOptions="actionSearch" 把回车键改为搜索--><EditText android:id="@+id/et_search_ams"android:layout_width="match_parent"android:imeOptions="actionSearch"android:inputType="text"android:maxLines="1"android:layout_height="wrap_content"android:layout_margin="12dp"android:padding="8dp"android:hint="输入详细地址查询"android:background="@drawable/shape_fill_white_with_gray_rec_bg"/></FrameLayout>

activity中的使用

这里面用到的定位初始化是我昨天写的个工具类高德地图定位工具类

class MapSearchActivity : BaseActivity() {//地图private lateinit var aMap: AMap//在地图上添加的一个一直在屏幕中心的点private var locationMaker: Marker? = nullprivate var mListener: LocationSource.OnLocationChangedListener? = nulloverride fun bindLayout() = R.layout.activity_map_searchoverride fun beforeSetContentView() {super.beforeSetContentView()window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)}override fun init(savedInstanceState: Bundle?) {//初始化地图map_ams.onCreate(savedInstanceState)aMap = map_ams.mapinitAmap(aMap, { locationSourceListener(it) }, { markerListener(it) })//设置地图拖动监听aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {override fun onCameraChangeFinish(cameraPosition: CameraPosition) {val latLng = cameraPosition.targetsearchNearby(latLng)}override fun onCameraChange(p0: CameraPosition?) {}})//定位初始化LocationInfo.getLocationInfo(this, {locationSuccess(it)})//搜索框监听et_search_ams.setOnKeyListener { v, keyCode, event ->if (keyCode == KeyEvent.KEYCODE_ENTER) {val string = et_search_ams.text.toString()getLatLngByAddress(this, string, string, { getLatlngSuccess(it) })val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager// 强制隐藏软键盘imm.hideSoftInputFromWindow(et_search_ams.windowToken, 0)}false}}private fun locationSourceListener(locationSource: LocationSource.OnLocationChangedListener?) {mListener = locationSource}//marker的点击事件监听private fun markerListener(marker: Marker): Boolean {return true}private fun locationSuccess(location: AMapLocation) {//显示系统小蓝点mListener?.let { mListener!!.onLocationChanged(location) }// 设置缩放级别aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location.latitude, location.longitude), 17f))// 将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(LatLng(location.latitude, location.longitude)))val markerOption = MarkerOptions()markerOption.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_location)).position(LatLng(location.latitude, location.longitude)).draggable(true).title("").snippet("哼哼哈哈哈")locationMaker = aMap.addMarker(markerOption)locationMaker?.setPositionByPixels(map_ams.width / 2,map_ams.height / 2)searchNearby(LatLng(location.latitude, location.longitude))}/*** 开始搜索附近*/private fun searchNearby(latLng: LatLng) {val query = PoiSearch.Query("", "", "")query.pageSize = 6val search = PoiSearch(this, query)search.bound = PoiSearch.SearchBound(LatLonPoint(latLng.latitude, latLng.longitude), 10000)search.setOnPoiSearchListener(object : PoiSearch.OnPoiSearchListener {override fun onPoiItemSearched(p0: PoiItem?, p1: Int) {}override fun onPoiSearched(result: PoiResult?, code: Int) {if (code == 1000) {val query = result?.queryval pois = result?.poisrlv_search_ams.layoutManager = LinearLayoutManager(this@MapSearchActivity)rlv_search_ams.adapter = object : CommonAdapter<PoiItem>(this@MapSearchActivity, R.layout.item_rlv_search_ams, pois) {override fun convert(holder: ViewHolder, t: Any?, position: Int) {val data = t as PoiItemholder.setText(R.id.tv_title_irsa, data.title)holder.setText(R.id.tv_address_irsa, data.snippet)holder.convertView.setOnClickListener {val address = data.provinceName + data.cityName + data.adName + data.snippetLog.e("aa", "点击的地址:$address")getLatLngByAddress(this@MapSearchActivity, data.cityCode, address, { getLatlngSuccess(it) })}}}} else {TOT("搜索错误")}}})search.searchPOIAsyn()}private fun getLatlngSuccess(geocodeResult: GeocodeResult) {val address = geocodeResult.geocodeAddressList[0]Log.e("aa", ("经纬度值:" + address.latLonPoint + "\n位置描述:"+ address.formatAddress))val latLng = LatLng(address.latLonPoint.latitude, address.latLonPoint.longitude)searchNearby(latLng)aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng))//设置返回值}override fun onResume() {super.onResume()// 重新绘制加载地图map_ams.onResume()}override fun onPause() {super.onPause()// 暂停地图的绘制map_ams.onPause()}override fun onDestroy() {super.onDestroy()// 销毁地图map_ams.onDestroy()}}

根据地址获取经纬度–高德地图 方法

fun getLatLngByAddress(context: Context,city:String,address:String,success:(GeocodeResult)->Unit){//构造 GeocodeSearch 对象,并设置监听。val geocodeSearch = GeocodeSearch(context)geocodeSearch.setOnGeocodeSearchListener(object :GeocodeSearch.OnGeocodeSearchListener{override fun onRegeocodeSearched(p0: RegeocodeResult?, position: Int) {}override fun onGeocodeSearched(geocodeResult: GeocodeResult?, position: Int) {if (position == AMapException.CODE_AMAP_SUCCESS) {if (geocodeResult?.geocodeAddressList != null&& geocodeResult.geocodeAddressList.size > 0) {success(geocodeResult)}}}})//通过GeocodeQuery设置查询参数,调用getFromLocationNameAsyn(GeocodeQuery geocodeQuery) 方法发起请求。//address表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode都okval query =GeocodeQuery(address, city)geocodeSearch.getFromLocationNameAsyn(query)}

哦,中心点的图标

希望能帮助到有需要的人

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。