android集成百度地图定位、poi检索、marker标记功能,以及marker点击事件
获取开发这密钥以及下载相关的jar包百度开发者文档有详细的说明,不多说,直接上代码。
1.
调用setContentView之前需要先调用
SDKInitializer.initialize(getApplicationContext());
不出意外此时地图已经显示出来了。
2.定位:
mBaiduMap.setMyLocationEnabled(true);
LocationClientmLocationClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
option.setIsNeedAddress(true);
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//设置高精度定位定位模式
option.setOpenGps(true);
// 打开gps
option.setCoorType("bd09ll");
// 设置坐标类型
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
mBaiduMap.setMyLocationEnabled(true);
locations = location;
// 构造定位数据
MyLocationData locData = https://www.it610.com/article/new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(0).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
// 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标)
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.mipmap.ic_launcher);
MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, null);
mBaiduMap.setMyLocationConfiguration(config);
// 当不需要定位图层时关闭定位图层
}
});
mLocationClient.start();
此时,完成定位功能,当前所在位置为地图中心点。
3.poi检索功能分三种,城市检索,周边检索,矩形区域检索
首先注册一个检索监听者,在回掉中标记marker点,灰色背景的代码即为设置marker点的方法,同时将检索位置的信息通过bundle传入marker信息中,方便对marker的后续操作。
PoiSearchmPoiSearch = PoiSearch.newInstance();
OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
public void onGetPoiResult(PoiResult result) {
//获取POI检索结果
if (result.getAllPoi() != null) {
mData = https://www.it610.com/article/result.getAllPoi();
//定义Maker坐标点
for (PoiInfo p : mData) {
LatLng point = new LatLng(p.location.latitude, p.location.longitude);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.ic_launcher);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
Bundle bundle = new Bundle();
//info必须实现序列化接口
bundle.putParcelable("info", p);
mBaiduMap.addOverlay(option).setExtraInfo(bundle);
//在地图上添加Marker,并显示
}}}public void onGetPoiDetailResult(PoiDetailResult result) {
//获取Place详情页检索结果
Log.e("result", result.toString());
}@Override
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {}
};
mPoiSearch.setOnGetPoiSearchResultListener(poiListener);
周边检索:
mPoiSearch.searchNearby((new PoiNearbySearchOption().pageCapacity(50)).radius(10000)
.location(new LatLng(locations.getLatitude(),locations.getLongitude()))
.keyword(et.getText().toString()));
城市检索:
mPoiSearch.searchInCity((new PoiCitySearchOption().pageCapacity(50))
.city("烟台")
.keyword(et.getText().toString()));
矩形检索:
LatLng southwest = new LatLng(locations.getLatitude() - 0.01, locations.getLongitude() - 0.012);
// 西南
LatLng northeast = new LatLng(locations.getLatitude() + 0.01, locations.getLongitude() + 0.012);
// 东北
mPoiSearch.searchInBound(new PoiBoundSearchOption().bound(new LatLngBounds.Builder().include(southwest).include(northeast).build()).keyword("酒店"));
4.为检索出的marker点设置点击事件,我这里设置的是点击弹出二维码记录marker点的位置信息 【android集成百度地图定位、poi检索、marker标记功能,以及marker点击事件】
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
//从marker中获取info信息
Bundle bundle = marker.getExtraInfo();
PoiInfo infoUtil = (PoiInfo) bundle.getParcelable("info");
// mSpeechSynthesizer.speak(infoUtil.name);
ImageView tv = new ImageView(MapActivity.this);
BitmapDescriptor bitmapDescriptor;
bitmapDescriptor = BitmapDescriptorFactory.fromView(tv);
//infowindow位置
LatLng latLng = new LatLng(marker.getPosition().latitude, marker.getPosition().longitude);
//infowindow点击事件
InfoWindow.OnInfoWindowClickListener listener = new InfoWindow.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick() {
//隐藏infowindow
mBaiduMap.hideInfoWindow();
}
};
//显示infowindow,-47是偏移量,使infowindow向上偏移,不会挡住marker
InfoWindow infoWindow = new InfoWindow(bitmapDescriptor, latLng, -107, listener);
mBaiduMap.showInfoWindow(infoWindow);
return true;
}
});
文章图片
推荐阅读
- android第三方框架(五)ButterKnife
- Activiti(一)SpringBoot2集成Activiti6
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)