转载请注明!

前言

使用高德SDK实现定位及周边的搜索界面,先看效果图:

使用到了高德以下sdk:

com.amap.api:3dmap:latest.integration

com.amap.api:search:latest.integration

思路分析

本文不对高德sdk的集成做介绍,主要说说实现该页面的思路。

需求:

进入页面自动定位,并且展示周边

搜索地点,并且展示该地点周边

周边列表的点击,然后切换地图的定位蓝点

具体实现

首先需要注意权限的获取。

初始化高德相关的东西:

/**

* 初始化定位相关

*/

private fun initLocationAbout() {

val myLocationStyle = MyLocationStyle()

myLocationStyle.showMyLocation(true)

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW)

//设置默认定位按钮是否显示

mMap.uiSettings.isMyLocationButtonEnabled = false

//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false

mMap.isMyLocationEnabled = true

mMap.myLocationStyle = myLocationStyle

//第一次定位

mMap.setOnMyLocationChangeListener {

val latLng = LatLng(it.latitude, it.longitude)

cameraMove(latLng)

}

mMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {

override fun onCameraChangeFinish(p0: CameraPosition) {

cameraMarkers(p0.target)

//判断是否需要搜索周边

if (isSearchRound) {

poiSearch(p0.target)

}

isSearchRound = true

}

override fun onCameraChange(p0: CameraPosition) {

}

})

}

移动定位点的方法:

/**

* 移动地图

* @param latLng 坐标

*/

private fun cameraMove(latLng: LatLng) {

//其中的18f表示的是地图放大级别

val camera = CameraUpdateFactory.newCameraPosition(CameraPosition(latLng, 18f, 0f, 0f))

mMap.moveCamera(camera)

}

周边搜索的方法:

/**

* 周边搜索

*/

private fun poiSearch(latLng: LatLng) {

val point = LatLonPoint(latLng.latitude, latLng.longitude)

val geocodeSearch = GeocodeSearch(this)

val regeocodeQuery = RegeocodeQuery(point, 200f, GeocodeSearch.AMAP)

geocodeSearch.getFromLocationAsyn(regeocodeQuery)

geocodeSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {

/**

* 逆地理编码

*/

override fun onRegeocodeSearched(p0: RegeocodeResult, p1: Int) {

if (p1 == AMapException.CODE_AMAP_SUCCESS) {

//创建当前位置的poi

val nowPoiltem = PoiItem(

"111",

p0.regeocodeQuery.point,

"地图位置",

p0.regeocodeAddress.formatAddress

)

nowPoiltem.adCode = p0.regeocodeAddress.adCode

nowPoiltem.provinceName = p0.regeocodeAddress.province

nowPoiltem.cityName = p0.regeocodeAddress.city

nowPoiltem.adName = p0.regeocodeAddress.district

val locationList = mutableListOf()

//因为搜索的周边列表并不包含当前搜索的位置,所以需要把当前位置插进去

locationList.add(nowPoiltem)

locationList.addAll(p0.regeocodeAddress.pois)

//周边展示的Adapter

mAdapter.setCityAbout(

p0.regeocodeAddress.province,

p0.regeocodeAddress.city,

p0.regeocodeAddress.district

)

mAdapter.replaceData(locationList)

mAdapter.setEmptyView(mNoData)

} else {

mAdapter.setEmptyView(mErrorLoad)

}

}

/**

* 地理编码

*/

override fun onGeocodeSearched(p0: GeocodeResult?, p1: Int) {

hideLoading()

}

})

}

关键字搜索:

/**

* 搜索关键字

*/

private fun doSearchQuery(keyWord: String) {

val query = PoiSearch.Query(keyWord, "", mCity)

query.pageSize = 50

query.pageNum = 0

//搜索

val poiSearch = PoiSearch(this, query)

poiSearch.setOnPoiSearchListener(this)

poiSearch.searchPOIAsyn()

showLoading()

}

/**

* 可以在回调中解析result,获取POI信息

* result.getPois()可以获取到PoiItem列表,Poi详细信息可参考PoiItem类

* 返回结果成功或者失败的响应码。1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)

*/

override fun onPoiSearched(p0: PoiResult, p1: Int) {

hideLoading()

if (p1 == AMapException.CODE_AMAP_SUCCESS) {

mPopupLocation.replaceData(p0.pois)

//弹出框

mXPopup?.show()

} else {

App.mApplication.toast("搜索地址错误!")

}

}

周边列表的点击:

mAdapter.setOnItemClickListener { adapter, view, position ->

val data: PoiItem = adapter.data[position] as PoiItem

isSearchRound = false

mSelectLocation = position

mAdapter.selectLocation(position)

//移动点

val latLng = LatLng(data.latLonPoint.latitude, data.latLonPoint.longitude)

//创建

cameraMove(latLng)

}

页面功能通过以上方法就能实现,如果发现某些监听不会回调,先看看引入的sdk。在编写时,我一开始引用的高德的2dmap,发现地图移动的监听不会回调,然后换到3dmap就好了。

android定位周边,Android 使用高德SDK编写周边搜索定位相关推荐

  1. Android 天气APP(二十八)地图搜索定位

    还是比较简单的,然后进入到MapWeatherActivity ImageView ivSearch;//搜索图标 @BindView(R.id.ed_search) EditText edSearc ...

  2. 高德地图引用,搜索定位

    以下为最近项目中开发的高得地图定位功能,附上效果图与源代码.mapUtil.jsvar map,addMarker;var geocoder;var placeSearch;var infoWindo ...

  3. Unity接入高德SDK实现定位

    一.在高德官网下载需要对应的SDK  http://lbs.amap.com/api/android-location-sdk 通过SHA1值获取对应的key值 a.SHA1值得获取:  1.在cmd ...

  4. 大搜索时代下的网络拓扑搜索定位

    互联网的大搜索时代 中国互联网十多年的发展历史中,搜索真正启蒙的时间也就最近一两年.搜索从雅虎时代到google时代的更替仅仅花了几年的时间,业界有这样的评价,雅虎搜索的没落是因为其处于搜索与门户交替 ...

  5. android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...

    Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 现在通过Gradle集成SDK(也可以使用jar包) ...

  6. 【Android笔记】Android 使用高德SDK获取定位

    Android 使用高德SDK获取定位 在Android开发过程中,经常需要获取手机的定位,这里记录一下使用搞的定位的过程.我选择使用高德的SDK,其实也有Web的API,但是API使用IP定位,An ...

  7. android打包jar包给unity使用接入高德sdk,实现定位。

    https://blog.csdn.net/unity_http/article/details/79929454 https://blog.csdn.net/why1happy/article/de ...

  8. js 调用android定位,基于html5+ 高德地图JS API使用安卓定位sdk用来进行定位

    使用Native.js打开Android的H5辅助定位 mui.plusReady(function() { if(plus.os.name == 'Android') { var AMapLocat ...

  9. android 高德地图河流,周边数据-创建地图-开发指南-Android 室内地图SDK | 高德地图API...

    周边数据 室内渲染SDK支持部分自定义周边数据的渲染,自定义数据的基本类型是点.线.面三种,可以用来表达周边的河流.道路.公交站.草坪等附属建筑,丰富室内地图的表达效果.周边数据可以在运行时加载,二进 ...

最新文章

  1. Java中的文件路径
  2. HDU4549(矩阵快速幂+快速幂)
  3. 众人皆醉我独醒——深入理解“特征值”和“特征向量”
  4. 最高补助1000万元!这类程序员2020年要过好日子了……
  5. postgresql GUC 参数
  6. Java HttpClient使用小结
  7. Linux下Gcc生成和使用静态库和动态库详解
  8. 从零开始学视觉Transformer(5):如何训练ViT模型、DeiT算法解析
  9. linux内核优化脚本,linux内核高级优化脚本
  10. matlab练习程序(径向模糊1)
  11. 电脑没网络在计算机哪,电脑没有wifi连接功能在哪里设置
  12. Windows下利用N2N访问内网资源,点对网的实现
  13. C/C++ 代码分析警告集
  14. PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
  15. 360卫士锁定IE主页之更换主页
  16. 7-2 sdust-Java-学生成绩读取与排序 (20 分)
  17. 什么是IDC ,可以用来做什么
  18. 10种预防癌症的“超级”食品
  19. NVMe1.4 Admin Command 学习(3)-- fw commit sanitize
  20. 计算机网络自顶向下方法知识点整理(部分)

热门文章

  1. 使用C#进行蓝牙开发-接收BLE广播
  2. LinkedIn领英帐号搜索浏览被限制的解决方法
  3. 基于边缘检测和透视变换的文档图像校正
  4. 关于uint与int
  5. 如何快速推广引流?利用微博截流疯狂获取流量
  6. scrapy splash模拟点击
  7. IE可以上网其他浏览器上不了
  8. VmwareTools工具安装
  9. matlab调整视频播放速度,会声会影如果调整视频播放速度
  10. 转 大数据量下载解决方案