百度map3.0 for android 数据库数据批量标注覆盖物附近兴趣点
在使用自己的数据时,每个数据点要标注在百度地图上,在sdk 3.0以前,可以使用OverlayItem,但sdk 3.0后没有了这个对象,而是提供了几个扩展好的类,超类都是OverlayManager,但需求要把数据库中查询出来的数据按地理坐标,标注在地图上,
目前暂时没有提供相应的方法,只能使用循环增加上去
for(int i=0;i<10;i++){
LatLng ll = new LatLng(locData.latitude,
locData.longitude);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions() .position(ll) .icon(BitmapDescriptorFactory.fromAsset(“point_start.png”));
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
}
然而我们还可以模仿api中的扩展类,下面看看扩展类的结构
其中调用sdk中搜索poi兴趣点时,返回结果为PoiResult配合PoiOverlay即可展现在地图上,如下面代码
mBaiduMap.clear();
PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
从这可以看出,我们可以自己定义Overlay就可以了
CustomeResult extends SearchResult 结构和PoiResult基本保持一致就可
CustomerOverlay extends OverlayManager 和PoiOverlay基本保持一致就可
有区别的在下面
@Override public List<OverlayOptions> getOverlayOptions() { if ((this.c == null) || (this.c.getAllPoi() == null)) return null; ArrayList localArrayList = new ArrayList(); int i = 0; for (int j = 0; (j < this.c.getAllPoi().size()) && (i < 10); j++) if (((PoiInfo)this.c.getAllPoi().get(j)).location != null) { i++; Bundle localBundle = new Bundle(); localBundle.putInt("index", j); localArrayList.add(new MarkerOptions().icon(BitmapDescriptorFactory.fromAsset("point_mark" + i + ".png")).extraInfo(localBundle).position(((PoiInfo)this.c.getAllPoi().get(j)).location)); } return localArrayList; }