4.1 KiB
4.1 KiB
智能星球可交互图标聚类策略
智能星球的可交互图标由 createInteractableLayer 统一管理。图标仍然使用 Three.js Points 渲染,拾取、hover、locked、tooltip 和巡航焦点继续依赖 marker 的 userData;聚类策略只决定“哪些 marker 被合成一个 cluster dot”。
策略
cluster.strategy 支持三种模式:
stable-spherical:稳定球面聚类。按地球局部 3D 坐标聚合,并用 zoom band 缓存拓扑;旋转和同档缩放只更新投影和尺寸,不重算谁和谁聚在一起。适合 BGP、超算/GPU 中心和 Earth interactable 这类半静态图层。dynamic-screen:动态屏幕聚类。保留原来的屏幕空间聚类逻辑,每帧按可见投影关系判断。适合船舶等高频实时图层,也可作为稳定策略的回退。none:不聚类。所有 marker 独立显示,适合低数量或需要精确展示的图层。
cluster: false 等价于 strategy: "none"。未显式声明 strategy 时,保持兼容行为:开启聚类的旧图层继续走 dynamic-screen。
Stable Spherical
stable-spherical 的核心是把聚类身份从屏幕距离迁到球面距离:
- 每个 marker 使用
icon_base_position作为真实地理锚点。 - 默认 zoom 超过
2.5时强制关闭聚类,所有 marker 展开为原图标。 - 当前 zoom 只映射到离散 band;同一 band 内旋转地球或细微缩放不会重算拓扑。
- 跨 band、数据变更、图层显隐变化时才重新计算 cluster。
- cluster 质心由成员 3D 坐标平均后 normalize 回球壳半径,因此 cluster dot 刚性贴在地理质心投影上。
- cluster dot 不参与 2D 避让,避免被屏幕排斥推离真实地理位置。
- band 切换带有少量 hysteresis,避免缩放停在临界点时在两个 band 之间来回跳。
- 新生成的 marker / cluster dot 会执行短 scale + opacity ease;这只是渲染过渡,不改变 marker 的真实经纬度、拾取对象或 locked 状态。
稳定策略使用球面 bucket/hash 邻域查询,禁止用全量双循环。这样大多数帧只承担投影与材质尺寸更新,聚类成本只在 band 或数据版本变化时支付。
配置示例
const computeCenterIconLayer = createInteractableLayer({
id: "computeCenters",
// ...
avoidance: SURFACE_AVOIDANCE_PROFILES.city,
cluster: {
strategy: "stable-spherical",
minCount: 2,
maxMarkersPerDot: 14,
transitionMs: 220,
bandHysteresis: 0.08,
disableAboveZoom: 2.5,
bands: [
{ key: "far", maxZoom: 1.7, distance: 15 },
{ key: "mid", maxZoom: 2.6, distance: 8 },
{ key: "near", maxZoom: 3.5, distance: 4 },
{ key: "detail", maxZoom: Infinity, distance: 0 },
],
},
});
实时层可以保留动态策略:
const vesselIconLayer = createInteractableLayer({
id: "vessels",
// ...
cluster: {
strategy: "dynamic-screen",
enabled: true,
maxMarkersPerDot: 10,
},
});
调参原则
distance是球面 3D 距离阈值,单位与CONFIG.earthRadius一致。值越大,越容易聚合。- 最远 band 用较大的
distance降低视觉密度;最近 band 通常设为0,让图标完全解散。 bandHysteresis控制 band 边界滞回。值太小容易临界闪烁,值太大会让切换略显迟钝。transitionMs控制聚散过渡时间。建议保持在 160-260ms,过长会让实时层显得拖泥带水。disableAboveZoom控制精细查看阈值。默认2.5,超过后不再生成 cluster;设为false可关闭这个硬阈值。- 高实时性图层优先用
dynamic-screen,避免数据频繁变更时触发稳定策略的拓扑重算。 - 若某图层出现异常,可临时切回
dynamic-screen或cluster: false。
验收重点
- 同一 zoom band 内旋转地球,cluster 不应闪烁或重新聚散。
- cluster dot 应跟随地球表面质心,不被避让逻辑推开。
- 放大到 detail band 后,应恢复该图层原本的图标纹理和点击行为。
- zoom 超过 250% 后不应再显示 cluster dot。
- vessel 等实时层更新后,图标和 cluster 应立即反映最新数据。