引言
最近项目在用百度地图SDK进行开发,在添加覆盖物的时候遇到了一些坑,在此记录下。
添加Marker
添加Marker有两种方式,一种是通过BaiduMap的addOverlays()方法添加,另一种是通过OverlayManager的addToMap()添加,实际上内部实现都是一样的,只是API不同
- 通过BaiduMap.addOverlays()方法添加覆盖物
1 2 3
| OverlayOptions option = new MarkerOptions(); option.position(latLng).icon(unselectedBitmap).title(cardStatistics.getCusName()).extraInfo(bundle); baiduMap.addOverlays(overlayOptions);
|
- 通过OverlayManager的addToMap()方法添加覆盖物
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| OverlayManager overlayManager = new OverlayManager(mapView.getMap()) { @Override public List<OverlayOptions> getOverlayOptions() { return overlayOptions; }
@Override public boolean onMarkerClick(Marker marker) { onMarkerClick(marker); return false; }
@Override public boolean onPolylineClick(Polyline polyline) { return false; } }; overlayManager.addToMap();
|
获取全部Marker
1
| List<Overlay> overlays = baiduMap.addOverlays(overlayOptions);
|
- 通过反射获取OverlayManager的mOverlayList字段获取
1 2 3 4 5 6 7 8 9 10
| try { Field field = OverlayManager.class.getDeclaredField("mOverlayList"); field.setAccessible(true); List<Overlay> overlays = (List<Overlay>) field.get(overlayManager); ... } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); }
|
使所有覆盖物Marker合适的显示在同一屏中
- 使用OverlayManager的zoomToSpan()方法
1
| overlayManager.zoomToSpan();
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public void zoomToSpan() { if (overlays != null && overlays.size() > 0) { LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Overlay overlay : overlays) { if (overlay instanceof Marker) { builder.include(((Marker) overlay).getPosition()); } } mapView.getMap().setMapStatus(MapStatusUpdateFactory .newLatLngBounds(builder.build())); } }
|