百度地图的接入,我这边就不多bb了,网上很多,官方文档也能看的七七八八。
使用之前除了清单文件配置好的话,还有一点就是初始化,尽量再Application中去做初始化
public class MyApp extends Application { public static Context myApplication; @Override public void onCreate() { super.onCreate(); myApplication = getApplicationContext(); SDKInitializer.initialize(myApplication); SDKInitializer.setCoordType(CoordType.BD09LL); } }
开始进入今天的主题
首先初始地图,这个方法直接copy就行,多的设置也可以再这个方法中去做
private BaiduMap mBaiduMap; private LocationClient mLocationClient; private void initMap() { //设置定位图标 // MyLocationConfiguration myLocationConfiguration = new //MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, null, 00000000, 00000000); // 不显示百度地图Logo mapView.removeViewAt(1); mBaiduMap = mapView.getMap(); mBaiduMap.setMyLocationEnabled(true); // mBaiduMap.setMyLocationConfiguration(myLocationConfiguration); //定位初始化 mLocationClient = new LocationClient(this); //通过LocationClientOption设置LocationClient相关参数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000); //设置locationClientOption mLocationClient.setLocOption(option); //注册LocationListener监听器 mLocationClient.registerLocationListener(mListener); //开启地图定位图层 mLocationClient.start(); setMaker();//设置marker }
这个方法中去设置marker,以及他的监听,
private List<LatLng> latLngList = new ArrayList<>(); private List<OverlayOptions> optionsList = new ArrayList<>(); private void setMaker() { mBaiduMap.clear();//先清除 地图上的覆盖物 //定义Maker坐标点 LatLng point = new LatLng(34.8972, 113.9117); latLngList.add(new LatLng(34, 113)); latLngList.add(new LatLng(35, 113)); latLngList.add(new LatLng(36, 113)); latLngList.add(new LatLng(37, 113)); latLngList.add(new LatLng(38, 113)); //一般都是接口请求的数据 我这边自己填充的数据 //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.mipmap.icon_safe_type_one); //构建MarkerOption,用于在地图上添加Marker for (int i = 0; i < 5; i++) { Bundle mBundle = new Bundle(); //用来传值 也可以识别点击的是哪一个marker mBundle.putString("title", "第" + i + "个marker"); mBundle.putDouble("lat", latLngList.get(i).latitude); mBundle.putDouble("lng", latLngList.get(i).longitude); OverlayOptions option = new MarkerOptions() .extraInfo(mBundle) //这里bundle 跟maker关联上 // .title("lat="+latLngList.get(i).latitude+"---lng="+latLngList.get(i).longitude) //也可以用title,但是官方提示已经过时了 .position(latLngList.get(i)) //设置经纬度 .icon(bitmap);//设置marker图标 optionsList.add(option); } //在地图上添加Marker,并显示 // mBaiduMap.addOverlay(option); 添加一个marker使用这个 mBaiduMap.addOverlays(optionsList); //添加marker list 的话,用这个 mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Bundle extraInfo = marker.getExtraInfo(); //通过这个方法获取到,你前面塞的值 String title = extraInfo.getString("title"); double lat = extraInfo.getDouble("lat"); double lng = extraInfo.getDouble("lng"); Toast.makeText(MainActivity.this, title + " ---- " + lat + "----" + lng, Toast.LENGTH_SHORT).show(); return false; } }); }
到此为止,可以运行一下看看结果了,我这边就不多做展示,
//注册监听器 官方文档上就有的东西,省的大家再去找
private BDAbstractLocationListener mListener = new BDAbstractLocationListener() { @Override public void onReceiveLocation(BDLocation location) { //mapView 销毁后不在处理新接收的位置 if (location == null || mapView == null) { return; } Log.e("fhxx", location.getLatitude() + " ------------" + location.getLongitude()); MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(location.getDirection()).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(19.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } };