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

来源:互联网 发布:阿里云域名接入 编辑:程序博客网 时间:2024/05/23 02:07

每周坚持写博客,愿意共同促进。
最近由于工作需要使用到百度地图上的点聚合功能,查找网上的资料写的不是很详细,走过了不少坑,今天特别把完整的过程写下来。
实现百度地图的点聚合功能,第一步要下载百度地图的SDK,并进行安装,这里就过多介绍了。下面开始介绍如何实现百度地图的点聚合功能,要在百度地图的下载里面下载百度地图的Demo,在下载里面找到BaiduMap_AndroidSDK_v4.3.0_Sample 文件夹,打开找到BaiduMapsApiASDemo,然后在app>src>main>java>clusterutli,将整个文件clusterutil复制粘贴到
这里写图片描述
下面就到了最麻烦的时候了,你需要将所有的文件路径修改自己程序的文件路径,
首先,需要修改两个类中引入的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<MyItem>(this, mBaiduMap);        // 添加Marker点        addMarkers();        // 设置地图监听,当地图状态发生改变时,进行点聚合运算        mBaiduMap.setOnMapStatusChangeListener(mClusterManager);        // 设置maker点击时的响应        mBaiduMap.setOnMarkerClickListener(mClusterManager);        mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {            @Override            public boolean onClusterClick(Cluster<MyItem> cluster) {                Toast.makeText(MainActivity.this,                        "有" + cluster.getSize() + "个点", Toast.LENGTH_SHORT).show();                return false;            }        });        mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() {            @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<MyItem> items = new ArrayList<MyItem>();        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);    }}

这样百度地图的聚合功能就实现了,如何大家需要源代码,可以私信联系我。看一下效果图:这里写图片描述
这里写图片描述

1 0