LBS 开发微课堂|点聚合插件全新上线 :聚合形式更多样,可视化表达更丰富

vue2中使用百度地图BMapGL 阅读详情

为了让广大的开发者

更深入地了解

百度地图开放平台的技术能力

轻松掌握满满的技术干货

更加简单地接入

开放平台的服务

我们特别推出了

“位置服务(LBS)开发微课堂”

系列技术案例

第三期的主题是

《点聚合插件全新上线》

地图点聚合技术在多个行业有着广泛应用,它能将大量的地理数据点聚合成簇,能够有效提提升数据的可视化效果和用户体验。

比如,在环境监测中可展示空气质量监测站的分布数据;快递公司能借此展示配送点的分布情况;零售连锁店可呈现其门店的分布和销售数据;旅游平台能展示各地景点和酒店的数量分布;智慧城市平台可展示公交车站、停车场等设施的分布和实时状态;房地产网站能展示各地区的房源分布和价格情况;出行平台则可显示附近的共享单车、网约车等的数量和位置。

在这里插入图片描述

01 聚合形式更多样

在这里插入图片描述

此次推出的地图点聚合插件提供了一系列专业且灵活的聚合方式,包括基于距离的聚合、基于距离的加权聚合、基于距离的分类聚合、基于属性的分类聚合、基于地理围栏的聚合,以及可分层级设置聚合。

这些多样化的聚合策略使用户能够高效地管理和展示地理数据点,以满足复杂的空间分析与展示需求。

1.1 实现思路

在这里插入图片描述

首先,处理用户定义的聚合类型参数,生成一个【地图层级-聚合形式】映射表。

随后,从聚合图层的地图最大层级到最小层级,依次查询相应的「聚合形式」并执行数据聚合。

接着,我们根据地图层级和窗口的地理范围进行数据检索,以获取聚合点和离散点信息。

最后,通过对比当前渲染点数据与窗口内的点数据,并结合配置的渲染条件,执行最终的渲染操作。

分层级聚合类型设置示例:

[
    // [开始层级,结束层级,聚合类型,限制条件]
    [3,5,Cluster.ClusterType.GEO_FENCE,['京津冀','长三角']],
    [6,9,Cluster.ClusterType.ATTR_REF,'province'],
    [10,,Cluster.ClusterType.DIS_PIXEL,20]
]

1.2 按距离聚合

在这里插入图片描述

首先,生成全部离散点 k-d 树,为后续的距离点检索做准备。

然后,根据地图层级和页面像素单位距离,从上一层级的结果 k-d 树中遍历节点:

① 如果当前节点是否已经处理过,则跳过,否则进行下一步;

② 检索距离内的节点集合,如果用户设置了分类限制,则需要进行节点集合的过滤;

③ 遍历节点集合,统计非处理过的数据的聚合点数量;

④ 如果聚合点数量不满足最低聚合点数量要求,则不进行聚合处理,直接标记当前节点以及聚合点集合节点已经处理;

⑤ 如果聚合点数量满足最低聚合点数量要求,则进行聚合点坐标加权处理,并标记当前节点以及聚合点集合节点已经处理。

最后,聚合处理结果数据生成本层级的 k-d 树,并进行下一层级的聚合计算流程,直至距离聚合层级结束。

1.3 按属性分类聚合

在这里插入图片描述

首先,遍历离散点数据,提取每个离散点的分类属性值作为键,并将其添加到分组数据集中。

接着,根据这些键匹配相应的地理坐标数据。

最终,将分组结果映射到k-d树结构中。

1.4 按地理围栏聚合

在这里插入图片描述

首先,根据地理围栏标识匹配对应的地理几何范围及中心点坐标。

接着,遍历离散点数据,提取当前离散点并与地理围栏进行空间运算,将归属于特定围栏标识的点添加到分组数据集中。

最终,将得到的围栏分组结果映射到k-d树结构中。

02 支持聚合点数据处理

2.1 累加器模式

支持聚合点累计数据,如聚合点中可实现按属性字段分类统计。

如果产品设计需要在聚合点罗列相同类型的离散点数量,那么可以使用累加器模式。

以下图为例,POI点聚合可视化中,聚合点罗列相同类别POI数量统计的可视化效果。

使用累加器可视化效果图

使用累加器可视化效果图

核心实现代码:

// 构造函数部分字段定义
{
    clusterMap: (props) => { // 累加器基础单元定义
        let data = {
            '景点': 0,
            '美食': 0,
            '娱乐': 0,
            '其他': 0
        }
        // type 为离散点属性字段, 1: 景点 2: 美食 3: 娱乐 4:其他
        data[['景点', '美食', '娱乐', '其他'][props.type - 1]] += 1;
        return data;
    },
    clusterReduce: (accumulated, props) => { // 累加器计算定义
        for (let key in props) {
            accumulated[key] += props[key];
        }
    },
    renderClusterStyle: { // 聚合点样式设置
        type: Cluster.ClusterRender.DOM,
        inject: (props) => {
            let reduces = props.reduces;
    
            if (reduces) {
                // 聚合点累加数据遍历
                for (let key in reduces) {
                    console.log(key,reduces[key]);
                }
            }
    
            // ......省略UI生成代码
        }
    }
}

2.2 抽取离散点

支持聚合点展示其所聚合的部分离散点的数据。

如果产品设计需要在聚合点罗列包含的部分离散点,那么可以使用抽取离散点功能。

以下图为例,小区图点聚合可视化中,聚合点罗列其中最多3个小区图片的可视化效果。

抽取离散点功能可视化效果图

抽取离散点功能可视化效果图

核心实现代码:

// 构造函数部分字段定义
{ 
    clusterListChildren: 3, // 抽取数量
    renderClusterStyle: {
        type: Cluster.ClusterRender.DOM,
        inject: (props: Cluster.IClusterDataset) => {
          // 聚合点抽取离散点数据遍历
          props.listChildren.forEach((item) => {
            console.log('cluster_item', item);
          });
          // ......省略UI生成代码
        }
    },
}

03 可视化表达更丰富

此次推出的@bmapgl-plugin/cluster 插件,能够实现更为丰富的可视化表达:

  • 聚合点: 通过使用具有不同颜色、大小或形状的图标或 UI 布局,可以清晰地表示不同数量的聚合点;

  • 离散点: 可以使用不同颜色、形状的图标或者 UI 布局来表示不同类型的地图点;

  • 动画展示: 可以帮助用户更直观地理解数据的分布和变化过程;

  • 交互式地图: 支持放大、缩小、平移、点击等交互操作,以便用户查看不同层级的数据。

在这里插入图片描述

核心实现代码:

// 构造函数部分字段定义
{ 
  isAnimation:true, // 是否启用动画
  renderClusterStyle: {
    type: Cluster.ClusterRender.DOM,
    style:{
        clusterAnimation:{ // 动画参数设置
            duration: 400,
            onlyNew: 'node_fladein', // 新节点显示动画样式名设置
            delayNew: 'node_fladein-delay', // 聚合节点显示动画样式名设置
            moveNew: 'node_fladein', // 离散节点显示过程动画样式名设置
            delayRemove: 'node_fladeout', // 聚合节点消失动画样式名设置
            moveRemove: 'node_fladeout' // 离散节点消失过程动画样式名设置
        }
    },
}

04 性能优化,提升用户体验

在性能方面,@bmapgl-plugin/cluster 插件也实现了显著的提升:

  • 数据缓存: 通过构建 k-d 树结构的空间数据索引,加速数据查询和聚合运算;

  • 渐进式加载: 根据地图缩放级别和视窗范围,动态加载和展示数据;

  • 增量式更新: 当前展示数据与待更新数据比对,当前缺失的添加展示,多余的移除展示。

4.1 数据缓存

k-d 树是一种用于组织 k 维空间点的二叉搜索树(BST),它被广泛应用于多维数据信息的管理和查询。

在点聚合应用中,进行范围搜索(range search)或最近邻搜索(nearest neighbor search)时,树结构允许快速排除大量不相关的区域,从而提高效率。

4.2 渐进式加载

在地理数据可视化中,特别是处理大型数据集时,可以先加载和显示一部分数据,然后逐步加载剩余数据。

此技术具备减少初始加载时间、提升用户体验、资源优化等优点。

4.3 增量式更新

在点聚合数据初始加载完成之后,地图交互发生时,只对数据的变化部分进行加载、更新和渲染,而不是重新加载整个数据集。

用户可以实时看到数据的更新,而不需要长时间等待整个数据集的重新加载或者页面渲染数据出现明显闪烁现象。

在这里插入图片描述

全新的点聚合插件@bmapgl-plugin/cluster已经发布,欢迎开发者前往百度地图开放平台官网JS API开发文档查看使用。

后续更多的可视化插件,敬请期待!

·END·

你还想了解哪些技术内容?

快来评论区留言告诉我们吧!

Bmap-markerCluster:百度地图10W数量级的打点聚合,解决官方聚合的性能问题 MarkerCluster 百度地图10W数量级的打点聚合,解决官方聚合的性能问题。正在测试优化中,可以在dev分支中尝试效果。 对百度官方聚合优化的点 我想这部分应该才是大家更关心的点,因此在此分享下优化的经验。 1、聚合计算完成后,再进行dom操作 百度原生聚合是计算一次,进行一个dom操作,然后进行下一次计算。不得不吐槽百度地图js是实习生还是后端人员写的,还看过其他开源库也有类似的问题。 2、不使用Map.getDistence()来计算两点距离,而是使用平面坐标系(墨卡托坐标系)计算两点距离 在聚合算法中,需要频繁使用getDistence()来判断最近的聚合点,此方法性能损耗很大,10w个点聚合计算,需要3s以上的时间。而预先转换为平面坐标系(墨卡托坐标)后,可以使时间减少至360ms(一般200多ms)左右. 3、使用webAssembly 使用webAssembly可以提高 立即下载

相关推荐

百度地图中心之坑

先说说现象吧,其实很简单。就是加上地图中心的代码后,地图全白了。我放缩地图,移动地图,白色区域和网格区域都存在。具体常见:http://blog.youkuaiyun.com/zinjin_woxin/article/details/52301030。欢迎留言,欢迎共勉。

百度地图的使用(Mark、Cluster…)

了解百度地图的基本使用,简单介绍一下一些基本内容,本文着重关于在 Marker 标注和点聚合这一块。

JinSo 的博客 2443

百度地图点聚合实现[项目源码]

本文详细介绍了如何在百度地图中实现点聚合功能,重点讲解了Marker标注的使用以及结合地图各省的聚合实现。文章首先介绍了使用react-bmapgl库的基本方法,然后详细说明了两种点聚合方案:MarkerClusterer(简单使用)和@bmapgl-plugin/cluster(复杂使用)。通过具体代码示例,展示了如何实现按省份进行点聚合,并详细解释了clusterType、clusterDictionary等关键属性的配置和使用。此外,文章还提供了省份数据的处理方法和如何矫正省份显示位置的技巧,最后介绍了如何对Marker进行事件操作。整体内容实用性强,适合需要在地图中实现复杂点聚合功能的开发者参考。

BMapGL点聚合

下一步主要解决new BMapLib.MarkerClusterer,两个js。下面index.html引入。

smdjk33的博客 1826

期权定价模型系列[11]三叉树期权定价[trinomial model ]

三叉树期权定价方法简介

xiaowu1997的博客 1847

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2080

百度地图点聚合(遇到问题)

2. 创建一个marker数组。

Dyj_zf的博客 2161

SillyTavern与Claude Code API集成:从零搭建AI聊天酒馆的完整指南

本文提供了一份从零搭建SillyTavern AI聊天前端的完整指南,重点讲解如何将其与Claude Code API集成。内容涵盖Node.js环境准备、SillyTavern部署、OpenAI兼容格式的API配置、模型选择与参数调校,以及角色扮演、扩展功能等高级玩法,帮助用户打造本地化、可定制的专属AI聊天体验。

assembly8low的博客 2612

百度地图聚合展示、轨迹展示、出现次数展示

摘要:本文展示了一个基于Vue3和百度地图GL的智能警务站地图组件实现。组件包含地图展示、标记点聚合、轨迹绘制、区域划分等功能,支持三种设备状态显示(在线、离线、故障)。通过Cluster插件实现标记点聚合,使用Catmull-Rom算法平滑轨迹线,并提供了响应式布局处理。组件通过props接收数据,emit事件传递交互信息,实现了警务设备监控、轨迹回放等警务应用场景的核心功能。代码采用TypeScript强类型检查,包含完善的错误处理和日志记录。

qq_39047060的博客 239

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 739

Orcad 17.2导出PDF原理图终极指南:从Ghostscript安装到带属性书签配置

本文是Orcad 17.2导出高质量PDF原理图的终极指南。针对导出过程中常见的Ghostscript安装报错、软件卡死及版本兼容性问题,提供了详细的解决方案。重点推荐使用Ghostscript 9.53.3版本以确保最佳兼容性,并深入讲解了从安装配置、内存优化到高级书签属性设置的完整流程,帮助硬件工程师稳定、高效地生成带完整器件属性和导航书签的PDF文档。

weixin_29281915的博客 397

百度地图点聚合缩放,label标签消失

1.本地新建js文件MarkerClusterer.js,内容如下: var BMapLib = window.BMapLib = BMapLib || {}; (function() {      var getExtendedBounds = function(map, bounds, gridSize) {          bounds = cutBoundsInRange(boun

lixq_css的博客 4400

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

BMapGL+mapvgl点聚合显示,点位名称和聚合数量

npm i mapvgl。引入的方式直接看官网吧。

weixin_57396144的博客 1039

车机破解避坑指南:为什么你的CarPlay盒子不识别?从USB设备ID解析兼容性问题

本文深入解析车机USB设备兼容性问题,特别是CarPlay盒子不识别的原因,从硬件ID到识别机制全面剖析。通过ADB工具和root权限操作,提供详细的破解方案和兼容性测试结果,帮助用户解决车机与第三方设备的连接问题。

weixin_29175469的博客 602

Win10 系统下VisualStudio2022 配置Open3D-0.18.0(C++)

Win10 系统下VisualStudio2022 配置Open3D-0.18.0

点云侠的博客 2657

对百度地图的 封装(GL版本)含有点聚合 原生js

对于百度地图的应用

qq_45319906的博客 2249

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Vue使用百度地图实现聚合的效果(vue-baidu-map)

Vue使用百度地图实现聚合的效果(vue-baidu-map)

weixin_44021888的博客 1414

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

百度地图 聚合(MarkerClusterer )

MarkerClusterer for Baidu Map Example #mapDiv1 { height:400px; width:600px; margin:20px } #mapDiv2 { height:400px; width:600

Mrzhangpan专栏 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

nuxt使用记录

注:nuxt2 不兼容 node18 版本环境,此项目使用 node v16.15.1 版本。

IT菜鸟 1215

高德地图实现点聚合,使用 AMap.MarkerCluster 插件

由于我这个页面是复用的,就是会根据路由值的不同,载入不同的内容,在整个地图生命周期中,这个 cluster 变量并不会改变。: 坐标,缺一不可,当然,除这两个字段数据外,可以根据自己需要添加其它信息,这些数据不会影响地图展示,但会在后面自定义标点的时候有用,后面有具体的数据内容说明。这也是后来遇到的一个问题,比如有多个项目点,如果其中一个项目点报警了,需要在这个聚合点上显示为报警状态。却只有一个数据,就是这几个点中权重最大的那个点的数据,它也是这个聚合点所在的地理位置。

学习笔记 1万+

百度地图MapGL点聚合

public里的index.html需要引入官方聚合的文件地址。

Blue54的博客 3449

uniapp地图开发(APP,H5)

uniapp 中地图开发

abs625的博客 2790

echarts 地图 点聚合功能

echarts 地图 点聚合功能完成

weixin_54902466的博客 7164
上一篇: LBS 开发微课堂|轨迹重合率分析API升级:距离无上限,操作更简便
下一篇: LBS 开发微课堂|逆地理编码升级:支持多版本行政区划数据,道路信息更丰富
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值