一键导入
minemap-billboard
MineMap 3D 公告板(Billboard)专题。覆盖 BillboardMaterial / BillboardGeometry / BillboardInstance 动画、拾取高亮、动态纹理更新与轨迹对象联动;不与 DOM 覆盖物 Marker 混淆。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
MineMap 3D 公告板(Billboard)专题。覆盖 BillboardMaterial / BillboardGeometry / BillboardInstance 动画、拾取高亮、动态纹理更新与轨迹对象联动;不与 DOM 覆盖物 Marker 混淆。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | minemap-billboard |
| description | MineMap 3D 公告板(Billboard)专题。覆盖 BillboardMaterial / BillboardGeometry / BillboardInstance 动画、拾取高亮、动态纹理更新与轨迹对象联动;不与 DOM 覆盖物 Marker 混淆。 |
MineMap 的 Billboard 是面向 3D 场景的 Primitive 体系下的公告板,不是 DOM 覆盖物。
minemap.Marker / minemap.Popup(见 minemap-marker-and-popup)minemap.BillboardMaterial + minemap.Geometries.BillboardGeometry + new minemap.Primitive({...})BillboardInstance 场景组件它和 sprite 图层(addLayer({ type: "sprite" }),见 minemap-layer-system)也不是同一回事:sprite 是 style-layer 路径,billboard 是 Primitive 路径。
对应 demo:demo/html/Billboard.html
const material = new minemap.BillboardMaterial({
position: [116.245, 40.063, 0],
scale: [1000, 140, 1], // X 宽 / Y 高 / Z 缩放
center: new minemap.Math.Vector2(0.5, 1), // 锚点 [0..1, 0..1]
rotation: 0, // 弧度
image: canvasElement // 或 imageUrl
});
const primitive = new minemap.Primitive({
id: "billboard-1",
geometry: new minemap.Geometries.BillboardGeometry({}),
material
});
map.addPrimitive(primitive);
// 动态更新纹理
setInterval(() => {
material.image = updateCanvas();
}, 100);
// 移除
map.removePrimitive(primitive);
对应 demo:demo/html/BillboardInstanceAnimation.html
BillboardInstance 是同一形状下"成百上千个公告板"的高效形式(共享几何 + 实例化),典型场景是车辆 / 人员 / 设备实时位置。
const material = new minemap.BillboardMaterial({
position: [119.447, 32.176, 0],
scale: [800, 200, 1],
center: new minemap.Math.Vector2(0.5, 1),
rotation: 0,
image: carIconImage
});
const geometry = new minemap.Geometries.BillboardGeometry({});
const billboardInstance = new minemap.BillboardInstance({
name: "vehicles",
geometry,
material
});
// 通过 addInstance / setInstances 注入每个公告板的位置 / 状态
billboardInstance.addInstance({
id: "car-1",
position: [119.45, 32.18, 0],
color: minemap.Color.WHITE.clone()
});
map.addPrimitive(billboardInstance);
BillboardMaterial 公开参数| 参数 | 说明 |
|---|---|
position | 经纬度+高度 [lng, lat, alt] |
scale | [X, Y, Z],X / Y 是世界米,Z 是缩放 |
center | Vector2,锚点 [0..1, 0..1] |
rotation | 弧度 |
image | HTMLCanvasElement / HTMLImageElement |
imageUrl | 与 image 二选一;URL 形式 |
flipY | 翻转纹理 Y(参考 WebGL 纹理属性) |
color | Vector4 (r, g, b, a) 颜色板 |
image是元素,imageUrl是路径。material.image = newCanvas可以热替换纹理。
BillboardGeometrynew minemap.Geometries.BillboardGeometry({}) 不需要参数,公告板形状由 BillboardMaterial.scale / center 决定。
BillboardInstance 关键行为来源:demo BillboardInstanceAnimation.html 注释
拾取高亮:
billboardInstance.color = new minemap.Color(1.0, 0.0, 0.0, 0.3);
动画回调:
billboardInstance.animationCallbackFunction = (instance) => {
// 每帧拿 instance.position / instance.color 等
};
记录动画位置(用于绘制实时轨迹):
billboardInstance.recordAnimationPositions = true;
const track = billboardInstance.animationPositions; // 数组
取消高亮 / 复位:
selectedBillboard.color = originalColor;
selectedBillboard.animationCallbackFunction = null;
selectedBillboard.recordAnimationPositions = false;
BillboardMaterial + BillboardGeometry + Primitive(最小单元)BillboardInstance(场景组件,复用 BillboardMaterial + BillboardGeometry)Marker / Popup(不在 Primitive 体系内,不参与 3D 深度)addLayer({ type: "sprite" })(贴地线 / 流动线,业务上不冲突)对应 demo:Billboard.html
material.image = canvas 热替换对应 demo:BillboardInstanceAnimation.html
BillboardInstance 一次性放成百上千个图标animationCallbackFunction 拿当前位置画圆形波纹 / 轨迹 / popuprecordAnimationPositions = true 开轨迹记录map.on("click", (e) => {
const picked = map.pickPrimitive(e.point);
if (picked && picked.primitive === billboardInstance) {
const instance = picked.detail; // instance 句柄
// 高亮 / 弹窗
}
});
BillboardMaterial 是 3D Primitive,会参与 depth-test,会被遮挡Marker 是 DOM,永远在最上层image vs imageUrl 二选一两者都传会冲突,源码会优先 image。
scale 是世界米不要把它当作像素。scale: [800, 200, 1] 表示宽 800 米、高 200 米;缩放级别变化时看起来会更近 / 更远,这是正常的。
recordAnimationPositions 会持续累积长时间开动画会越积越多,业务上要么在合适时机 recordAnimationPositions = false,要么定期清。
BillboardInstance 拾取粒度拾取到的是整个实例集合,再 picked.detail 拿具体 instance;不要在每个 instance 上挂 onClick。
image / imageUrl 没加载完;或 position 高度低于地形被裁scale 单位是米,不是像素Marker / Popup 路径color 设错了字段(要在 instance 上而不是 material 上)recordAnimationPositions = true 或 animationCallbackFunction 之前就已经访问 animationPositionsdemo/html/Billboard.html:单公告板 + Canvas 实时画板demo/html/BillboardInstanceAnimation.html:车辆 / 设备级 BillboardInstance 动画 + 拾取 + 轨迹minemap-marker-and-popup:DOM 覆盖物 Marker / Popupminemap-primitives-and-materials:Primitive 体系minemap-business-roaming-and-tracking:轨迹 / 漫游minemap-layer-system:sprite style-layer(不与 3D Billboard 混用)MineMap 云与大气渲染链。用于启用体积云(多层 CloudLayer)、单片实例化云(map.cloudCollection)、大气散射与太阳 / 天空辐照度,重点说明主分支公开参数与禁用字段。
MineMap 事件订阅模型、图层事件代理、once/off 管理、矢量与三维对象拾取。
MineMap 热力图(heatmap)专题。用于二维 / 三维热力图、贴地热力、聚合权重、热力色阶与 3D 显示模式,重点说明 paint/layout 参数边界与典型失败场景。
MineMap KML 数据源。用于加载 KML / KMZ 文件,解析 LineStyle / IconStyle / LabelStyle / PolyStyle 等样式继承,并把 KML 属性映射为 line / circle / fill / symbol 派生图层。
MineMap 材质与着色规范。覆盖 `StandardMaterial`、`PhongMaterial`、`PhysicalMaterial`、`LambertMaterial`、`PolylineMaterial` 等主流材质的选型与调参。
MineMap 渲染后端(auto/webgpu/webgl2/webgl1)选择、降级策略、特效开关与性能调优。