Android:百度地图,点聚合功能

每周坚持写博客,愿意共同促进。
最近由于工作需要使用到百度地图上的点聚合功能,查找网上的资料写的不是很详细,走过了不少坑,今天特别把完整的过程写下来。
实现百度地图的点聚合功能,第一步要下载百度地图的SDK,并进行安装,这里就过多介绍了。下面开始介绍如何实现百度地图的点聚合功能,要在百度地图的下载里面下载百度地图的Demo,在下载里面找到BaiduMap_AndroidSDK_v4.3.0_Sample 文件夹,打开找到BaiduMapsApiASDemo,然后在app>src>main>java>clusterutli,将整个文件clusterutil复制粘贴到
Android:百度地图,点聚合功能_第1张图片
下面就到了最麻烦的时候了,你需要将所有的文件路径修改自己程序的文件路径,
首先,需要修改两个类中引入的R文件的路径,修改成自己的 import 自己的package.R即可
1. com.baidu.mapapi.clusterutil.ui.IconGenerator
2. com.baidu.mapapi.clusterutil.clustering.view.DefaultClusterRenderer
第二,将styles.xml,string.xml的文件中的相关部分拷贝过来
第三,将layout文件夹中的text_bubble.xml文件拷贝过来
下面就是实现聚合的代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        mMapView = (MapView) findViewById(R.id.bmapView);
        ms = new MapStatus.Builder().target(new LatLng(39.914935, 116.403119)).zoom(8).build();
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setOnMapLoadedCallback(this);
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(ms));
        // 定义点聚合管理类ClusterManager
        mClusterManager = new ClusterManager(this, mBaiduMap);
        // 添加Marker点
        addMarkers();
        // 设置地图监听,当地图状态发生改变时,进行点聚合运算
        mBaiduMap.setOnMapStatusChangeListener(mClusterManager);
        // 设置maker点击时的响应
        mBaiduMap.setOnMarkerClickListener(mClusterManager);

        mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() {
            @Override
            public boolean onClusterClick(Cluster cluster) {
                Toast.makeText(MainActivity.this,
                        "有" + cluster.getSize() + "个点", Toast.LENGTH_SHORT).show();

                return false;
            }
        });
        mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() {
            @Override
            public boolean onClusterItemClick(MyItem item) {
                Toast.makeText(MainActivity.this,
                        "点击单个Item", Toast.LENGTH_SHORT).show();

                return false;
            }
        });


}
    @Override
    protected void onPause() {
        mMapView.onPause();
        super.onPause();
    }

    @Override
    protected void onResume() {
        mMapView.onResume();
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        mMapView.onDestroy();
        super.onDestroy();
    }

    @Override
    public void onMapLoaded() {
        // TODO Auto-generated method stub
        ms = new MapStatus.Builder().zoom(9).build();
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(ms));
    }

    public class MyItem implements ClusterItem {
        private final LatLng mPosition;

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

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

        @Override
        public BitmapDescriptor getBitmapDescriptor() {
            return BitmapDescriptorFactory
                    .fromResource(R.drawable.icon_gcoding);
        }
    }
    /**
     * 向地图添加Marker点
     */
    public void addMarkers() {
        // 添加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 items = new ArrayList();
        items.add(new MyItem(llA));
        items.add(new MyItem(llB));
        items.add(new MyItem(llC));
        items.add(new MyItem(llD));
        items.add(new MyItem(llE));
        items.add(new MyItem(llF));
        items.add(new MyItem(llG));

        mClusterManager.addItems(items);

    }

}

这样百度地图的聚合功能就实现了,如何大家需要源代码,可以私信联系我。看一下效果图:Android:百度地图,点聚合功能_第2张图片
Android:百度地图,点聚合功能_第3张图片

你可能感兴趣的:(android开发,android,百度地图)