BaiduMap SDK-Marker点聚合

目录

1 Marker点聚合简介

2 Marker点聚合集成

2.1 点聚合功能

2.2 点聚合集成

2.2.1 代码集成

2.2.2 xml配置

2.2.3 代码实现点聚合


1 Marker点聚合简介

地图上添加少量的Marker时还比较顺畅,如果添加大量Marker就会卡顿,  BaiduMap添加了点聚合功能,可以通过缩小地图级别将多个定义的标注点聚合成一个标注点,如果放大地图级别将显示所有的标注点;

2 Marker点聚合集成

2.1 点聚合功能

BaiduMap SDK提供的BaiduLBS_Android.jar没有点聚合功能,但是SDK的案例中BaiduMapsApiASDemo项目中的
com.baidu.mapapi.clusterutil包下实现了点聚合功能;

2.2 点聚合集成

2.2.1 代码集成

把com.baidu.mapapi.clusterutil.*拷贝到项目中;

2.2.2 xml配置

1. 拷贝text_bubble.xml到项目layout文件中;

2. styles.xml添加

 <style name="Bubble.TextAppearance.Dark" parent="android:TextAppearance.Medium">
        <item name="android:textSize">14sp</item>
        <item name="android:textColor">#ff7f7f7f</item>
    </style>

    <style name="Bubble.TextAppearance.Light" parent="Bubble.TextAppearance.Dark">
        <item name="android:textColor">#ffeeeeee</item>
    </style>
    <style name="ClusterIcon.TextAppearance" parent="android:TextAppearance">
        <item name="android:textColor">#ffeeeeee</item>
        <item name="android:textSize">16sp</item>
        <item name="android:textStyle">bold</item>
    </style>

2.2.3 代码实现点聚合

1.添加一个MarkerClusterItem类继承ClusterItem

public class MarkerClusterItem implements ClusterItem{
    private final LatLng mPosition;

    public MarkerClusterItem(LatLng latLng) {
        mPosition = latLng;
    }

    @Override
    public LatLng getPosition() {
        return mPosition;
    }

    @Override
    public BitmapDescriptor getBitmapDescriptor() {
        return BitmapDescriptorFactory
                .fromResource(R.drawable.icon_gcoding);
    }
}

2.创建点聚合

 //初始化点聚合管理类
        clusterManager = new ClusterManager(this,baiduMap);
        // 添加Marker点
        LatLng llA = new LatLng(39.963175, 116.400244);
        LatLng llB = new LatLng(39.942821, 116.369199);
        LatLng llC = new LatLng(39.939723, 116.425541);
        LatLng llD = new LatLng(39.906965, 116.401394);
        LatLng llE = new LatLng(39.956965, 116.331394);
        LatLng llF = new LatLng(39.886965, 116.441394);
        LatLng llG = new LatLng(39.996965, 116.411394);

        List<MarkerClusterItem> items = new ArrayList<MarkerClusterItem>();
        items.add(new MarkerClusterItem(llA));
        items.add(new MarkerClusterItem(llB));
        items.add(new MarkerClusterItem(llC));
        items.add(new MarkerClusterItem(llD));
        items.add(new MarkerClusterItem(llE));
        items.add(new MarkerClusterItem(llF));
        items.add(new MarkerClusterItem(llG));
        //点集合设置到Cluster管理类
        clusterManager.addItems(items);

3.点聚合添加事件

        //点聚合事件
        baiduMap.setOnMapStatusChangeListener(clusterManager);
        //Marker点击事件
        baiduMap.setOnMarkerClickListener(clusterManager);

        clusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() {
            @Override
            public boolean onClusterClick(Cluster cluster) {
                Toast.makeText(getApplicationContext(),"一共有:"+cluster.getSize()+"个点",
Toast.LENGTH_SHORT).show();
                return false;
            }
        });
     
        clusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() {
            @Override
            public boolean onClusterItemClick(ClusterItem item)
          {
                Toast.makeText(getApplicationContext(),"点击了单个Item",Toast.LENGTH_SHORT).show();
                return false;
            }
        });

 

猜你喜欢

转载自blog.csdn.net/niuba123456/article/details/81140012