地图点聚合优化方案

⬆️小马哥⬆️ ⬆️小马哥⬆️     2022-10-02     627

关键词:

http://www.cnblogs.com/LBSer/p/4417127.html

一、为什么需要点聚合

      在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症(图1)。为了解决这一问题,我们需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息,而又不产生重叠覆盖。

图1

二、已尝试的方案---kmeans

         直觉上用聚类算法能较好达成我们目标,因此采用简单的kmeans聚类。根据客户端的请求,我们知道了客户端显示的范围,并到索引引擎里取出在此范围内的数据,并对这些数据进行kmeans聚类,最后将结果返回给客户端。

         但是上线之后发现kmeans效果并不如意,主要有以下两个缺点。

a)性能问题

         kmeans是计算密集型算法,需要迭代多次才能完成,而且每次迭代过程中都涉及到复杂的距离计算,比较消耗cpu。

         我们在上线后遇到load较高的问题。

b)效果问题

         kmeans未能彻底解决重叠覆盖问题!可以看到有些聚合后的图标会叠合在一起。

三、优化方案

       再次回顾我们的目的:我们需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息,而又不产生重叠覆盖。

3.1. 直接网格法

      解决地理空间相关问题时,对空间划分网格这种方法往往屡试不爽。

      原理:将地图范围划分成指定尺寸的正方形(每个缩放级别不同尺寸),然后将落在对应格子中的点聚合到该正方形中(正方形的中心),最终一个正方形内只显示一个中心点,并且点上显示该聚合点所包含的原始点的数量。

      如何将点落到正方形内呢?我们将空间人为指定100*100大小,通过这个公式进行映射。

        优点:运算速度较快,每个原始点只需计算一次,没有复杂的距离计算。

        缺点:有时明明很相近的点,却仅仅因为网络的分界线而被逼分开在不同的聚合点中,此外,聚合点的位置采用的是该网格的中心,而非该网格的质心,这样聚合出来的点可能不能较精确反映原始点的信息。

3.2. 网格距离法

       原理:沿用方案一思想,1)将各个点落到相应正方形内;2)求解各个网格的质心;3)合并质心:判断各个质心是否在某一范围内,如果在某一范围内则进行合并。

      如何判断各个质心点是否需要合并呢?以A点为例,画一个矩形或者圆范围,落在此范围内的合并,B、C均落在范围内,因此A、B、C三点合并。

         优点:运算速度同样较快,相对于方案一,多了求解质心以及质心合并两个步骤,但这两个步骤都较为简单,能很快完成。

3.3. 直接距离法

         原理:初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的变长由用户指定或程序设置一个默认值),若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。每个缩放级别都重新遍历所有原始点要素。

         优点:运算速度相对较快,每个原始点只需计算一次,可能会有点与点距离计算,聚合点较精确的反映了所包含的原始点要素的位置信息。

         缺点:速度不如完全基于网格的速度快等,此法还有个缺点,就是各个点迭代顺序不同导致最终结果不同。因此涉及到制定迭代顺序的问题。

 

 

3.4. K-D树方法

       这种方法需要结合PCA(主成分分析)和K-D树,在效果上比较好,但是性能较差,实现也较为复杂。

http://applidium.com/en/news/too_many_pins_on_your_map/

 

 

谷歌地图聚合点

我们有时候需要观察地图不同地方数据的所在范围和分布密集情况,热力图和聚合点的使用无疑是最好的选择。1.首先说说百度地图,只做国内的地图可以使用百度地图的海量点和热力图还是蛮好用的。a.海量点的最大好处是加... 查看详情

百度地图点聚合

<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><metaname="viewport"content="initial-scale=1.0,user-scalable=no"/><styletype="text/css">body, 查看详情

ionic修改应用名称及修改百度离线地图点聚合图标

1.ionic修改应用名称2.修改百度离线地图点聚合图标 查看详情

教你如何拔取百度地图poi兴趣点

教你如何拔取百度地图POI兴趣点 通过聚合数据提供的接口,获取百度地图的POI兴趣点,并存储至数据库中。 实现:1、聚合数据百度POI接口说明调用聚合数据,首先得注册聚合。聚合数据提供的百度地图POI的接口有三个... 查看详情

高德地图的marker和markercluster的应用场景分析

参考技术A表格中每一行数据均对应地图上一个坐标点,要求:1、在表格中选中一行时,在地图上对应坐标点被同步点亮,以区别其他坐标点2、点击地图上坐标点时,在表格中对应数据行被同步选中,以区别表格中其他数据行。... 查看详情

高德地图实现一个比例圆环形聚合点缩放(代码片段)

前言:碰到一个需求,效果实现一个该范围不同点数的圆环比例以及总数。比例按照对应的区域内不同内容的数量实现比例圆环比例。查看高德api只有点聚合效果,我们可以根据他的基础api来增加实现更高级的效果改造。先上效... 查看详情

elasticsearch聚合优化|聚合速度提升5倍!(代码片段)

1、聚合为什么慢?大多数时候对单个字段的聚合查询还是非常快的,但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用Elasticsearch大量内存,从而导致OOM的情况发生。实践应用发现,以下情况都会比... 查看详情

百度点聚合功能,自定义针头功能

 关于怎么导入百度地图SDK与创建应用就不多说了,百度的文档应该比我说的更详细,下面直接正文吧:demo图:demo路径在最下面;1.首先地图的初始化-(void)viewWillAppear:(BOOL)animated{  [superviewWillAppear:animated];}-(void)setupView{  ... 查看详情

百度地图聚合功能自定义聚合文字

参考技术A研究百度地图聚合源码发现,如果打算自定义文字需要修改两处:一、修改BMapLib.MarkerClusterer.js插件中Cluster.prototype.updateClusterMarker方法,实现过程如下:方法中:this._clusterMarker.setText(this._markers.length);表示,聚合点显示... 查看详情

spark性能优化指南--高级篇

...决方案三:提高shuffle操作的并行度解决方案四:两阶段聚合(局部聚合+全局聚合)解决方案五:将reducejoin转为mapjoin解决方案六:采样倾斜key并分拆join操 查看详情

转载spark性能优化指南——高级篇

...决方案三:提高shuffle操作的并行度解决方案四:两阶段聚合(局部聚合+全局聚合)解决方案五:将reducejoin转为mapjoin解决方案六:采样倾斜key并分拆join操 查看详情

arcgisjavascriptapi实现点聚合

...题,现在已知的两种方式:一种是点云(baidu地图中的小红点,其实不是显示了所有的结果)另一种方式就是:点聚合(把临近的点聚合成一个大点显示)。这里只说点聚合,首先看下G 查看详情

java示例代码_谷歌地图如何´";优化航路点和#34;解决旅行推销员的问题

java示例代码_谷歌地图如何´";优化航路点和#34;解决旅行推销员的问题 查看详情

耳语聚合不适用于旧数据点

】耳语聚合不适用于旧数据点【英文标题】:whisperaggregationnotworkingforolderdatapoints【发布时间】:2015-05-1011:48:09【问题描述】:碳储存方案[default]pattern=.*retentions=5m:15d,15m:1y,1h:10y,1d:100y存储聚合:[all_sum]pattern=.*xFilesFactor=0.1aggregation... 查看详情

百度地图怎么设置

参考技术A问题一:百度地图的系统设置在哪里点击界面左上,登陆图像,找设置,找存储位置问题二:百度地图怎么设置途径点百度地图驾车方案添加途经点方法:将鼠标移至地图上的驾车线路,会出现一个可供您拖动的途经... 查看详情

天地图之点聚合(代码片段)

地图中一次性渲染成千上万个点容易造成页面崩溃,那么可以选择点聚合的形式渲染标记点,地图引入就不啰嗦了,可以参考此专栏前几篇文章1.模拟接口这里用到了Mock.js模拟了接口返回的经纬度,Mock.js,也... 查看详情

聊聊效果优化跟踪的埋点方案

一场景描述做电商的同学们是不是一直在为GMV上不去而头疼不已,设计了好多的展示页面,引流点,希望能够为最后的下单付款添砖加瓦。 但是展示位做多了,分析展示位带来的最终效果似乎会有些复杂,这么多的展示位,... 查看详情

聊聊效果优化跟踪的埋点方案

一场景描述做电商的同学们是不是一直在为GMV上不去而头疼不已,设计了好多的展示页面,引流点,希望能够为最后的下单付款添砖加瓦。 但是展示位做多了,分析展示位带来的最终效果似乎会有些复杂,这么多的展示位,... 查看详情