细读百度地图点聚合源码(上)

之前在项目中需要用到百度地图的点聚合,看了百度提供的demo之后,稍微读了一些源码就能达到需求了,所以并未深入解读源码。

最近有空就把百度实现点聚合的源码从里到外仔细研究了一遍受益良多,在此分享一下。

为了方便研究我把百度demo中点聚合相关的类抽出来,新建了个工程,有需要可以下载来研究。ClusterDemo 

整个源码分析过程我分为三个部分:

1.整体结构分析

2.核心算法分析

3.实现点聚合


本篇为上篇,主要分析1,2部分。之后还会有个下篇,着重分析具体如何实现marker点聚合以及一些动画处理,这一部分百度处理的非常精妙。

废话少说,进入正文。


1.整体结构

先上一张思维导图:




根据上图我们可以知道,要实现点聚合功能主要分为两部分:

一个是ClusterItem接口,需要我们提供一个实现类,此类主要用来生成地图最终显示的marker,所以包含了经纬度坐标,marker的icon图标,

以及一些其他我们需要保存在marker中的信息。

看代码,这是demo实现的一个ClusterItem的实现类

    /**
     * 每个Marker点,包含Marker点坐标以及图标
     */
    public class MyItem implements ClusterItem {
        private final LatLng mPosition;

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

        @Override
        public LatLng getPosition() {
            return mPosition;
        }//返回marker的坐标

        @Override
        public BitmapDescriptor getBitmapDescriptor() {//返回marker的图标
            return BitmapDescriptorFactory
                    .fromResource(R.drawable.icon_gcoding);
        }
    }
比较简单,就不多说了。

另一个是ClusterManager,从图中可以看到它实现了两个百度地图的接口,一个是监听地图状态变化(地图缩放时,执行点聚合),另一个是监听marker的点击事件。

所以在Demo中给地图设置监听接口时&#x

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
PHP 和 JavaScript 都支持 JSON 数据格式,但是在处理 JSON 数据时有一些不同之处。 在 PHP 中,可以使用 `json_encode()` 函数将数组或对象转换为 JSON 格式的字符串,例如: ```php $data = array('name' => 'John', 'age' => 30); $json = json_encode($data); echo $json; // 输出 {"name":"John","age":30} ``` 同样地,在 PHP 中,可以使用 `json_decode()` 函数将 JSON 格式的字符串转换为数组或对象,例如: ```php $json = '{"name":"John","age":30}'; $data = json_decode($json); echo $data->name; // 输出 John ``` 在 JavaScript 中,可以使用 `JSON.stringify()` 方法将对象转换为 JSON 格式的字符串,例如: ```javascript var data = {name: 'John', age: 30}; var json = JSON.stringify(data); console.log(json); // 输出 {"name":"John","age":30} ``` 同样地,在 JavaScript 中,可以使用 `JSON.parse()` 方法将 JSON 格式的字符串转换为对象,例如: ```javascript var json = '{"name":"John","age":30}'; var data = JSON.parse(json); console.log(data.name); // 输出 John ``` 需要注意的是,在 PHP 中,可以将 JSON 格式的数据直接解码为关联数组或对象,而在 JavaScript 中,解析 JSON 数据时始终会得到一个对象。如果要得到关联数组,则需要手动处理。例如,在 JavaScript 中,可以将解析后的对象转换成关联数组: ```javascript var json = '{"name":"John","age":30}'; var data = JSON.parse(json); var dataArray = []; for (var key in data) { dataArray.push({key: key, value: data[key]}); } console.log(dataArray); // 输出 [{key:"name",value:"John"},{key:"age",value:30}] ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值