sigmav2经纬度坐标节点位置重合问题解决及方案可行性性能咨询
方案可行性评估
- 该方案完全可行,是
sigma库处理经纬度节点重合问题的常用轻量落地思路,无明显逻辑缺陷:- 首先做节点聚合:遍历全量节点,按经纬度坐标做分组,每组生成1个专属聚合节点,可额外新增
clusterSize属性展示组内节点数,样式和普通节点做差异化显示即可 - 绑定交互逻辑:给聚合节点添加
click事件监听器,点击触发后隐藏当前聚合节点,将组内原始节点插入画布,初始位置可设置为聚合节点周围小范围偏移的坐标,再给非本组的所有节点添加fixed: true属性,避免布局时其他区域节点位置变动 - 触发布局展开:调用
forceAtlas2算法运行100~300次迭代,即可让重合节点自然散开,不需要全量重排整个画布
- 首先做节点聚合:遍历全量节点,按经纬度坐标做分组,每组生成1个专属聚合节点,可额外新增
- 额外优化提示:可以给聚合节点加右键/二次点击收起逻辑,展开后把组内节点替换回聚合节点即可,交互更完整
1000节点/2000边场景性能表现
- 该规模下性能完全满足业务流畅要求,无明显感知卡顿:
- 聚合计算阶段:1000个节点的坐标分组运算复杂度为O(n),浏览器端执行耗时不超过1ms,用户完全无感知
- 点击展开阶段:就算单次展开的重合节点数量达到100个,
forceAtlas2仅针对非固定的组内节点做局部运算,单次迭代耗时<5ms,200次迭代总耗时不超过1s,动画效果流畅 - 即使不做局部固定优化,直接全量运行
forceAtlas2,1000节点2000边的规模在现代浏览器中单帧运算耗时也不会超过16ms,符合60帧的流畅标准,不会出现页面假死或掉帧问题
内容的提问来源于stack exchange,提问作者Davor Gajic
相关产品推荐
相关产品推荐

