kotlin实现百度地图城市poi搜索
时间: 2023-11-18 12:04:21 浏览: 40
您好,以下是Kotlin实现百度地图城市POI搜索的示例代码:
```kotlin
// 导入必要的类
import com.baidu.mapapi.map.BaiduMap
import com.baidu.mapapi.map.MapView
import com.baidu.mapapi.search.poi.*
import com.baidu.mapapi.model.LatLng
// 在Activity中声明相关变量
private var mBaiduMap: BaiduMap? = null
private var mMapView: MapView? = null
private var mPoiSearch: PoiSearch? = null
// 在onCreate()方法中初始化
mMapView = findViewById(R.id.mapView)
mBaiduMap = mMapView!!.map
mPoiSearch = PoiSearch.newInstance()
// 在需要搜索的地方调用以下方法
val city = "北京" // 城市名
val keyword = "餐厅" // 关键词
val center = LatLng(39.915, 116.404) // 搜索中心点坐标
val radius = 1000 // 搜索半径,单位:米
// 设置搜索参数
val poiSearchOption = PoiCitySearchOption()
.city(city)
.keyword(keyword)
.location(center)
.radius(radius)
mPoiSearch?.search(poiSearchOption)
// 监听搜索结果
mPoiSearch?.setOnGetPoiSearchResultListener(object : OnGetPoiSearchResultListener {
override fun onGetPoiResult(poiResult: PoiResult?) {
if (poiResult == null || poiResult.error != SearchResult.ERRORNO.NO_ERROR) {
// 搜索失败处理
return
}
// 处理搜索结果
val poiList = poiResult.allPoi
for (poiInfo in poiList) {
// 获取POI的经纬度、名称、地址等信息
val poiLatLng = poiInfo.location
val poiName = poiInfo.name
val poiAddress = poiInfo.address
// 在地图上添加标记
val markerOptions = MarkerOptions()
.position(poiLatLng)
.title(poiName)
.snippet(poiAddress)
mBaiduMap?.addOverlay(markerOptions)
}
}
override fun onGetPoiDetailResult(poiDetailResult: PoiDetailResult?) {
// 不处理
}
override fun onGetPoiIndoorResult(poiIndoorResult: PoiIndoorResult?) {
// 不处理
}
override fun onGetPoiDetailResult(poiDetailSearchResult: PoiDetailSearchResult?) {
// 不处理
}
})
// 在onDestroy()方法中释放资源
mPoiSearch?.destroy()
```
以上代码中,我们先在Activity中声明了`mBaiduMap`、`mMapView`和`mPoiSearch`三个变量。在`onCreate()`方法中,我们初始化了`mMapView`和`mBaiduMap`,并通过`PoiSearch.newInstance()`方法创建了一个`mPoiSearch`实例。
在需要搜索的地方,我们设置了搜索参数,然后调用`mPoiSearch?.search(poiSearchOption)`方法开始搜索。在搜索结果回调中,我们可以通过`PoiResult`对象获取搜索结果,然后处理结果并在地图上添加标记。
最后,在`onDestroy()`方法中,我们释放了`mPoiSearch`实例。