效果图:
需要实现的方法:
OnMapStatusChangeListener(地图状态改变的方法)
OnGetGeoCoderResultListener(返回周边数据的方法)
BDLocationListener(定位的方法)
定义的变量:
private BaiduMap baiduMap;
private GeoCoder geoCoder;
private Boolean isFirst=true;
private List<PoiInfo> list=new ArrayList<>();
初始化控件:
private void initMap() {
baiduMap = map.getMap();
map.showScaleControl(false);//比例尺隐藏
map.showZoomControls(false);//缩放隐藏
baiduMap.setMyLocationEnabled(true);//开启定位层
baiduMap.setOnMapStatusChangeListener(this);
LocationClient locationClient = new LocationClient(mContext);
LocationClientOption locationClientOption = new LocationClientOption();
locationClientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
locationClientOption.setCoorType("bd09ll");
locationClientOption.setScanSpan(1000);
locationClientOption.setIsNeedAddress(true);
locationClientOption.setIsNeedLocationDescribe(true);
locationClientOption.setIsNeedLocationPoiList(true);
locationClientOption.setOpenGps(true);
locationClient.registerLocationListener(this);
locationClient.setLocOption(locationClientOption);
locationClient.start();
}
定位 实现的方法:
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if(bdLocation.getLocType()!=BDLocation.TypeServerError){
if (bdLocation.getLocType() == 61 || bdLocation.getLocType() == 161|| bdLocation.getLocType() == 66) {
if(isFirst){
LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
baiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLngZoom(ll,18));
isFirst=false;
}
geoCoder = GeoCoder.newInstance();
ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption();
reverseGeoCodeOption.location(new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()));
geoCoder.reverseGeoCode(reverseGeoCodeOption);
geoCoder.setOnGetGeoCodeResultListener(this);
} else {
ToastUtils.showShort("定位失败");
}
}else {
ToastUtils.showShort("定位失败");
}
}
地图状态改变实现的方法:
@Override
public void onMapStatusChangeFinish(MapStatus mapStatus) {
LatLng latLng=mapStatus.target;
geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng));
}
@Override
public void onMapStatusChangeStart(MapStatus mapStatus) {
}
@Override
public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
}
@Override
public void onMapStatusChange(MapStatus mapStatus) {
}
刷新数据实现的方法
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
if (null != reverseGeoCodeResult) {
list.clear();
list.addAll(reverseGeoCodeResult.getPoiList());
outPositionAdapter.notifyDataSetChanged();
}
}
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { }