百度地图3.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;
}

 

猜你喜欢

转载自913.iteye.com/blog/2235779