android定位周边,Android 使用高德SDK编写周边搜索定位
转载请注明!
前言
使用高德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编写周边搜索定位相关推荐
- Android 天气APP(二十八)地图搜索定位
还是比较简单的,然后进入到MapWeatherActivity ImageView ivSearch;//搜索图标 @BindView(R.id.ed_search) EditText edSearc ...
- 高德地图引用,搜索定位
以下为最近项目中开发的高得地图定位功能,附上效果图与源代码.mapUtil.jsvar map,addMarker;var geocoder;var placeSearch;var infoWindo ...
- Unity接入高德SDK实现定位
一.在高德官网下载需要对应的SDK http://lbs.amap.com/api/android-location-sdk 通过SHA1值获取对应的key值 a.SHA1值得获取: 1.在cmd ...
- 大搜索时代下的网络拓扑搜索定位
互联网的大搜索时代 中国互联网十多年的发展历史中,搜索真正启蒙的时间也就最近一两年.搜索从雅虎时代到google时代的更替仅仅花了几年的时间,业界有这样的评价,雅虎搜索的没落是因为其处于搜索与门户交替 ...
- android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 现在通过Gradle集成SDK(也可以使用jar包) ...
- 【Android笔记】Android 使用高德SDK获取定位
Android 使用高德SDK获取定位 在Android开发过程中,经常需要获取手机的定位,这里记录一下使用搞的定位的过程.我选择使用高德的SDK,其实也有Web的API,但是API使用IP定位,An ...
- android打包jar包给unity使用接入高德sdk,实现定位。
https://blog.csdn.net/unity_http/article/details/79929454 https://blog.csdn.net/why1happy/article/de ...
- js 调用android定位,基于html5+ 高德地图JS API使用安卓定位sdk用来进行定位
使用Native.js打开Android的H5辅助定位 mui.plusReady(function() { if(plus.os.name == 'Android') { var AMapLocat ...
- android 高德地图河流,周边数据-创建地图-开发指南-Android 室内地图SDK | 高德地图API...
周边数据 室内渲染SDK支持部分自定义周边数据的渲染,自定义数据的基本类型是点.线.面三种,可以用来表达周边的河流.道路.公交站.草坪等附属建筑,丰富室内地图的表达效果.周边数据可以在运行时加载,二进 ...
最新文章
- Java中的文件路径
- HDU4549(矩阵快速幂+快速幂)
- 众人皆醉我独醒——深入理解“特征值”和“特征向量”
- 最高补助1000万元!这类程序员2020年要过好日子了……
- postgresql GUC 参数
- Java HttpClient使用小结
- Linux下Gcc生成和使用静态库和动态库详解
- 从零开始学视觉Transformer(5):如何训练ViT模型、DeiT算法解析
- linux内核优化脚本,linux内核高级优化脚本
- matlab练习程序(径向模糊1)
- 电脑没网络在计算机哪,电脑没有wifi连接功能在哪里设置
- Windows下利用N2N访问内网资源,点对网的实现
- C/C++ 代码分析警告集
- PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
- 360卫士锁定IE主页之更换主页
- 7-2 sdust-Java-学生成绩读取与排序 (20 分)
- 什么是IDC ,可以用来做什么
- 10种预防癌症的“超级”食品
- NVMe1.4 Admin Command 学习(3)-- fw commit sanitize
- 计算机网络自顶向下方法知识点整理(部分)