百度地图3.0 for android 数据库数据批量标注覆盖物附近兴趣点

在升级到百度地图SDK 3.0后,如何将数据库中的地理坐标数据批量标注在地图上成为了一个挑战。由于OverlayItem不再可用,开发者需要利用OverlayManager的子类进行自定义。通过循环遍历数据库数据,创建MarkerOptions并添加到地图。同时,可以借鉴PoiOverlay的实现,创建自定义的CustomeResult和CustomerOverlay类,以便于展示数据库中的兴趣点信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用自己的数据时,每个数据点要标注在百度地图上,在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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值