emmmm,效果图先行(搜索定位以及自由滑动地图展示周边位置信息,根据点击的位置获取经纬度)

aa.gif

主要代码package com.dydd.wsp.dreamtree.ui.mapimport android.content.Contextimport android.os.Bundleimport android.support.v7.widget.LinearLayoutManagerimport android.util.Logimport android.view.KeyEventimport com.amap.api.location.AMapLocationimport com.amap.api.maps.AMapimport com.amap.api.maps.CameraUpdateFactoryimport com.amap.api.maps.LocationSourceimport com.amap.api.maps.model.*import com.dydd.wsp.dreamtree.Rimport com.dydd.wsp.dreamtree.ui.base.BaseActivityimport com.dydd.wsp.dreamtree.utils.LocationInfoimport com.amap.api.services.core.LatLonPointimport com.amap.api.services.core.PoiItemimport com.amap.api.services.geocoder.GeocodeResultimport com.amap.api.services.poisearch.PoiResultimport com.amap.api.services.poisearch.PoiSearchimport com.dydd.wsp.dreamtree.ui.adapter.common.CommonAdapterimport com.dydd.wsp.dreamtree.ui.adapter.common.ViewHolderimport com.dydd.wsp.dreamtree.utils.InitAmap.initAmapimport com.dydd.wsp.dreamtree.utils.TOTimport com.dydd.wsp.dreamtree.utils.getLatLngByAddressimport kotlinx.android.synthetic.main.activity_map_search.*import android.view.WindowManagerimport android.view.inputmethod.InputMethodManager/**

* Created by ${吴心良} on 2018/7/5.

* E-mail:wusongpingsmile@gmail.com

* Describe:搜索地址展示附近地址

*/class MapSearchActivity : BaseActivity() {    private lateinit var aMap: AMap    private var locationMaker: Marker? = null    private var mListener: LocationSource.OnLocationChangedListener? = null

override fun bindLayout() = R.layout.activity_map_search

override fun beforeSetContentView() {

super.beforeSetContentView()

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

}

override fun init(savedInstanceState: Bundle?) {        //初始化地图

map_ams.onCreate(savedInstanceState)

aMap = map_ams.map

initAmap(aMap, { locationSourceListener(it) }, { markerListener(it) })        //设置地图拖动监听

aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {

override fun onCameraChangeFinish(cameraPosition: CameraPosition) {

val latLng = cameraPosition.target

searchNearby(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) {        //这三个参数,第一个是搜索关键字,第二个是搜索的类型,具体类型参照高德api

val query = PoiSearch.Query("", "", "")        //查询条数

query.pageSize = 6

val 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?.query

val pois = result?.pois

rlv_search_ams.layoutManager = LinearLayoutManager(this@MapSearchActivity)

rlv_search_ams.adapter = object : CommonAdapter(this@MapSearchActivity

, R.layout.item_rlv_search_ams, pois) {

override fun convert(holder: ViewHolder, t: Any?, position: Int) {

val data = t as PoiItem

holder.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.snippet

Log.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()

}

}

html代码<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/map_ams"

android:layout_width="match_parent"

android:layout_height="match_parent">

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: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"/>

用到的工具类方法:

1、initAmapobject 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表示隐藏定位层并不可触发定位,默认是false

aMap.isMyLocationEnabled = true//        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE)

aMap.setOnMarkerClickListener {

marker(it)

}

}

}

2、定位信息object LocationInfo {    fun getLocationInfo(context: Context, success: (AMapLocation) -> Unit) {

val mLocationClient = AMapLocationClient(context)

val mLocationOption = AMapLocationClientOption()        // 初始化定位

// 设置高德地图定位回调监听

mLocationClient.setLocationListener { aMapLocation ->            if (aMapLocation != null) {                if (aMapLocation.errorCode == 0) {

val locationType = aMapLocation.locationType // 获取当前定位结果来源,如网络定位结果,详见定位类型表

val latitude = aMapLocation.latitude // 获取纬度

val longitude = aMapLocation.longitude // 获取经度

val accuracy = aMapLocation.accuracy // 获取精度信息

val address = aMapLocation.address // 地址,如果option中设置isNeedAddress为false,则没有此结果,

// 网络定位结果中会有地址信息,GPS定位不返回地址信息。

val country = aMapLocation.country // 国家信息

val province = aMapLocation.province // 省信息

val city = aMapLocation.city // 城市信息

val district = aMapLocation.district // 城区信息

val street = aMapLocation.street // 街道信息

val streetNum = aMapLocation.streetNum // 街道门牌号信息

val cityCode = aMapLocation.cityCode // 城市编码

val adCode = aMapLocation.adCode // 地区编码

val aoiName = aMapLocation.aoiName // 获取当前定位点的AOI信息

val buildingId = aMapLocation.buildingId // 获取当前室内定位的建筑物Id

val floor = aMapLocation.floor // 获取当前室内定位的楼层

val gpsAccuracyStatus = aMapLocation.gpsAccuracyStatus //获取GPS的当前状态

// 获取定位时间

val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

val date = Date(aMapLocation.time)

df.format(date)

success(aMapLocation)

} else {                    // 定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。

TOT("获取定位失败")

}

}

}        // 初始化AMapLocationClientOption对象

// 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息

// 设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式

mLocationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy        // 低功耗定位模式:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位);

//设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。

//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);

// 仅用设备定位模式:不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,自 v2.9.0 版本支持返回地址描述信息。

// 设置定位模式为AMapLocationMode.Device_Sensors,仅设备模式。

//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);

// SDK默认采用连续定位模式,时间间隔2000ms

// 设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。

mLocationOption.interval = 60000

// 设置定位同时是否需要返回地址描述

//设置是否返回地址信息(默认返回地址信息)

mLocationOption.isNeedAddress = true

// 设置是否强制刷新WIFI,默认为强制刷新。每次定位主动刷新WIFI模块会提升WIFI定位精度,但相应的会多付出一些电量消耗。

// 设置是否强制刷新WIFI,默认为true,强制刷新。//        mLocationOption.isWifiActiveScan = true

// 设置是否允许模拟软件Mock位置结果,多为模拟GPS定位结果,默认为false,不允许模拟位置。

// 设置是否允许模拟位置,默认为false,不允许模拟位置

mLocationOption.isMockEnable = false

// 设置定位请求超时时间,默认为30秒

// 单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。

mLocationOption.httpTimeOut = 50000

// 设置是否开启定位缓存机制

// 缓存机制默认开启,可以通过以下接口进行关闭。

// 当开启定位缓存功能,在高精度模式和低功耗模式下进行的网络定位结果均会生成本地缓存,不区分单次定位还是连续定位。GPS定位结果不会被缓存。

// 关闭缓存机制

mLocationOption.isLocationCacheEnable = false

// 设置是否只定位一次,默认为false

mLocationOption.isOnceLocation = true

// 给定位客户端对象设置定位参数

mLocationClient.setLocationOption(mLocationOption)        // 启动高德地图定位

mLocationClient.startLocation()

}

}

3、根据地址获取经纬度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都ok

val query =GeocodeQuery(address, city)

geocodeSearch.getFromLocationNameAsyn(query)

}

作者:吴心良

链接:https://www.jianshu.com/p/da8676200d5d

高德地图怎么搜索marker_2018-07-06 高德地图搜索定位,滑动地图显示周边信息,根据地址搜经...相关推荐

  1. Qt quick-QML地图引擎之v3版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)

    在上个版本64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索.路径规划.轨迹编辑等)_诺谦的博客-CSDN博客_qt高德地图插件基础下新增以下功能: 1.支持多线程请求.超时重 ...

  2. 【高德地图WEB开发】 入门篇(地图/搜索/经纬度/缩放层级)

    前言 本篇文章是高德地图web开发入门篇,实现地图搜索等基本功能,后续会继续更新地图标记点.驾车.骑行.货车等单地点\多地点导航.公交路线.兴趣周边点.及其他地图功能开发文章,所有功能均使用js实现, ...

  3. 高德地图怎么搜索marker_百度、高德、腾讯地图坐标认证怎么弄,3分钟轻松自助认证...

    各位头条的朋友,各位长期关注我的无人店运营情况的朋友,大家好.上次跟大家分享了一些无人店引流的办法,有一些已经开店的朋友就很感兴趣,纷纷私信问我,具体怎么操作.这次有机会就跟大家讲一下,百度.高德地图 ...

  4. 高德地图完整功能的html,揭秘高德地图八大不为人知的强大功能

    高德地图作为国内车主使用最多的手机地图,在日常扮演着为用户搜索地点.规划线路.躲避拥堵等等"出行服务小帮手"的重要角色.其实,作为国内领先的数字地图内容.导航和位置服务提供商高德的 ...

  5. 地图上分成一块一块区域 高德地图_各种地图(如百度地图、腾讯地图和高德地图)体验上有什么区别?...

    文末有更新 ----------------------- 见图,来体验一下2015年12月7日的百度地图,我真是无话可说 我从来没有搜索过这种东西. 这问题我也@了客服,现在不知道还有没有. 呵呵, ...

  6. 安卓系统的导航仪怎么设置导航启动路径为高德地图_2019春节温暖回家路,高德地图6大实用功能逐一看...

    最近在高德地图群里,这句话很暖心:即使回家有100种困难,我也有101种方式回家! 手机导航已经成为了出行必装的APP,在国内,车载导航的巨头凯立德也已经被手机导航彻底打败,地图不再是导航功能,已经成 ...

  7. 高德地图路径轨迹起点标点不变_前有百度高德,后有华为滴滴,腾讯地图该如何上演王者归来的戏码?...

    腾讯地图界面(图片来自网络) 文 | 魏启扬 来源 | 智能相对论(ID:aixdlun) BAT的商战大戏是科技圈永不过时的话题. 手机地图的竞争版图中,阿里的高德地图.百度地图两骑绝尘,拥有绝对的 ...

  8. android开发之高德地图API篇:1、高德地图API之实时定位+轨迹可视化

    TIME:2020年7月6日 高德地图API之实时定位+轨迹可视化 前言: step1.工程的配置 step2.显示地图 step2.实现静态定位: step3.实时定位 step4.实现轨迹可视化: ...

  9. 地图白话(一):互联网地图公司高德的前世今生

    首先是地图行业的"老大哥"--高德 高德相较于腾讯.百度走的是自产自销的路子,它本身就是国内少数的地图厂商之一,这莫多年一直和"四维"相爱相杀,甚至在14年5月 ...

最新文章

  1. 【VS开发】【DSP开发】WinDriver简介(或介绍)
  2. 机试记不住头文件_计算机考研机试攻略
  3. 验证Node和npm是否安装成功
  4. 1687: 数组操作(非常规思维)
  5. 第七届(16年)蓝桥杯java B组决赛真题及前四题解析
  6. Oracle 11g中文版高清视频教程
  7. JS与APP原生控件交互
  8. 拍不完的脑袋:推荐系统打压保送重排策略
  9. 物联网大数据平台应具备的功能和特点
  10. oracle完全卸载重装历程
  11. 操作cookies值
  12. UML的类图中各箭头的含义
  13. 小米随身wifi没有网络显示无服务器,小米wifi怎么用 小米随身wifi无法上网怎么办...
  14. DreamScene for Windows 7梦幻桌面使用教程
  15. java 操作 led_Java中使用反射机制操作LED
  16. gre填空高频词汇整理
  17. android ios开发难度对比,ios VS android:这不就是简洁与复杂最明显的对比
  18. Groovy~Groovy运算符
  19. VBA 对 range() 或 cells() 的内容格式的修改, 如 range.address(0,0) cells().formulaR1C1
  20. 高德地图坐标查询工具——JavaScript

热门文章

  1. vue 条件渲染 v-if | v-show
  2. hadoop ubantu环境搭建_ubuntu hadoop学习 环境搭建
  3. linux错误码61,Linux编程中的错误码列表
  4. linux 网络劫持编程,Linux下实现劫持系统调用的总结(上)--代码及实现
  5. 背景图层和普通图层的区别_图层样式(一)—高级混合选项
  6. JavaScript————FormData实现多文件上传
  7. php mysql 排名_mysql中如何实现排名
  8. 服务器搭建维护,服务器搭建维护方法
  9. HTML+CSS+JS实现 ❤️人物走悬崖小游戏❤️
  10. HTML+CSS+JS实现 ❤️h5酷炫的天体木星动画特效❤️