with one click
minemap-fundamentals
MineMap 地图初始化、基础相机参数、生命周期事件、控件添加与清理。用于新建地图、初始化交互、规范化启动流程。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
MineMap 地图初始化、基础相机参数、生命周期事件、控件添加与清理。用于新建地图、初始化交互、规范化启动流程。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
MineMap 3D 公告板(Billboard)专题。覆盖 BillboardMaterial / BillboardGeometry / BillboardInstance 动画、拾取高亮、动态纹理更新与轨迹对象联动;不与 DOM 覆盖物 Marker 混淆。
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` 等主流材质的选型与调参。
| name | minemap-fundamentals |
| description | MineMap 地图初始化、基础相机参数、生命周期事件、控件添加与清理。用于新建地图、初始化交互、规范化启动流程。 |
const style = {
version: 8,
glyphs: "minemap://fonts/{fontstack}/{range}",
sprite: "minemap://sprite/sprite",
sources: {},
layers: []
};
const map = new minemap.Map({
container: "map",
style,
position: [116.39, 39.9, 3000],
pitch: 60,
bearing: 0,
roll: 0,
minZoom: 1,
maxZoom: 22,
projection: minemap.ProjectionType.MERCATOR,
renderBackend: "auto" // auto -> webgpu/webgl2/webgl1
});
map.on("load", () => {
map.addControl(new minemap.Navigation(), "top-right");
map.addControl(new minemap.Scale(), "bottom-left");
});
Map 构造要求:
center + zoom,或用 position(二选一)minZoom <= maxZoomminPitch <= maxPitch但从 MineMap 4.x 的真实相机模型来看,新代码更推荐优先使用 position,而不是 center + zoom。
原因:
position 直接表达相机位置 [lng, lat, height]target 飞行、setCameraPositionHeadingPitchRoll()、三维模型调试联动center + zoom 更像兼容传统 2D 地图思维,适合快速起图,不适合作为长期的 3D 主表达推荐理解:
center + zoomposition + bearing + pitch + rollconst map = new minemap.Map({
container: "map",
style,
position: [116.39, 39.9, 1500],
pitch: 55,
bearing: 15,
roll: 0
});
关于 position:
[经度, 纬度, 距地表高度(米)]Map 参数应该怎么分组理解最常用的构造参数可以分成 5 组:
containerstyleprojection这是创建地图的必备入口。
position 或 center + zoombearingpitchroll这组参数决定你打开页面时“从哪里、以什么姿态看场景”。
minZoom / maxZoomminPitch / maxPitchmaxBoundsminHeightToDemSurface这组参数用来限制用户视角跑飞。
scrollZoomdragPandragRotatedoubleClickZoomkeyboardfirstPersonViewtouchZoomRotatetouchPitchrenderBackendrenderBackendPreferenceskyBoxearthSkinfxaaOITSSRlogDepth推荐做法:
renderBackend 优先 autologDepth、SSR 这类高级项要结合专题 skill 再启用默认开启:scrollZoom、dragPan、dragRotate、doubleClickZoom、keyboard、firstPersonView、触摸缩放/俯仰。
可按需关闭:
const map = new minemap.Map({
container: "map",
style,
dragRotate: false,
firstPersonView: false,
touchPitch: false
});
load: 地图主体可用style.load: 样式树完成,可安全加 source/layerdata / dataloading: 数据加载流idle: 当前帧无动画/无请求(适合“全部稳定后”逻辑)页面卸载前调用 map.remove(),释放 WebGL/事件/worker 资源。
source/index.js 还直接暴露了一组全局运行时配置:
minemap.keyminemap.solutionminemap.dataVersionminemap.domainUrlminemap.dataDomainUrlminemap.serverDomainUrlminemap.serviceUrlminemap.spriteUrlminemap.fontsUrl建议:
Map 之前完成这些配置key + solution,不再把 accessToken 当主推荐入口domainUrl 用于重定向静态资源根路径dataDomainUrl / serverDomainUrl 只在你确实接管数据域、分析服务域时再改兼容入口 appKey / accessToken 仍存在,但当前源码真实优先级是 key > appKey > accessToken。完整配置说明、window.minemapCDN、demo 取值方式和私有化部署边界,统一放到独立技能包 minemap-global-configuration。
公开控件除了常见的 Navigation、Scale、Fullscreen、Attribution、Geolocate,还包括:
FPSControl:性能观测控件Thumbnail:鹰眼缩略导航控件ModelTransformationControl:模型姿态调试/编辑控件BatchAddInstanceControl:实例化模型批量落位控件EarthRotationControl:地球自转演示控件这些都走统一的 map.addControl() / map.removeControl() 生命周期。
控件协议、默认停靠位、自定义控件实现,以及 Thumbnail / ModelTransformationControl / BatchAddInstanceControl 这类工具型 widget 的边界,统一放到独立技能包 minemap-widget-and-controls。
MineMap 里最容易混淆的,不是 API 名字,而是对象层级。
可以把常见结构分成 4 层:
这是地图底图和常规专题图层的主数据结构。
const style = {
version: 8,
glyphs: "minemap://fonts/{fontstack}/{range}",
sprite: "minemap://sprite/sprite",
sources: {
poi: {
type: "geojson",
data: { type: "FeatureCollection", features: [] }
}
},
layers: [
{
id: "poi-circle",
type: "circle",
source: "poi",
paint: { "circle-radius": 6, "circle-color": "#2d8cf0" }
}
]
};
这里的职责是:
style:整张地图的样式树source:数据来源layer:把某个 source 画成具体视觉结果适合:
这是 MineMap 4.x 推荐的三维主入口。
map.addSceneComponent({
id: "building",
type: "3d-model",
data: modelUrl,
position: [116.39, 39.9, 10],
rotation: [0, 0, 0],
scale: [1, 1, 1]
});
map.addSceneComponent({
id: "cityTiles",
type: "3d-tiles",
urls: [{ url: tilesetUrl, name: "city" }]
});
这里常见对象有:
3d-model → SceneModel3d-tiles → SceneTilesetscene-object → Earth / Skybox / Panorama / AirLine 等适合:
Primitive 是比 scene component 更底层的一层。
它通常由:
geometrymaterialmodelMatrix共同构成。
const geometry = new minemap.Geometries.BoxGeometry({
width: 100,
height: 60,
depth: 40
});
const primitive = new minemap.Primitive({
geometry,
material: minemap.StandardMaterial.fromType("Color", {
color: "green",
opacity: 0.8
}),
modelMatrix: matrix
});
map.addPrimitive(primitive);
适合:
geometry 只负责“形状”,不负责颜色、贴图、光照和挂载。
常见有:
BoxGeometryPlaneGeometryPolygonGeometryPolylineGeometryCircleGeometryTubeGeometry要点:
geometry 不是可直接上屏的最终对象material 一起放进 Primitive可用一个简单判断法:
Marker 与 PopupMarker 和 Popup 现在单独拆到了独立 skill。
在 fundamentals 里只记住 4 条:
distanceDisplayConditionsetAltitude() 表达相对地表高度Popup 支持高度,但不支持深度测试完整参数、三维高度联动、地形拖拽和 Marker + Popup 绑定细节,统一看 minemap-marker-and-popup。
Maploadstyle.load 后批量添加 source/layer 或 scene componentareTilesLoaded() 或 idle 作为业务“可交互完成”信号jumpTo / easeTo / flyToMineMap 的视角动画不要只理解成“地图平移一下”。
它实际上有 3 套常用入口:
jumpTo():立即切换,没有过渡easeTo():常规缓动过渡,适合 UI 导航、轻量视角调整flyTo():飞行路径过渡,适合场景切换、模型聚焦、远近景切换推荐原则:
jumpTo()easeTo()flyTo()对于动画接口,更推荐用 target,而不是继续坚持 center + zoom。
因为 target 能直接表达:
[lng, lat, height]PrimitiveSceneModelSceneTilesetBoundingSphere / BoundingBox这和 3D 场景更匹配。
map.flyTo({
target: [116.39, 39.9, 1200],
bearing: 20,
pitch: 60,
duration: 2000
});
或者直接飞向一个场景对象:
map.flyTo({
target: map.getSceneComponent("cityTiles"),
pitch: 55,
bearing: 0,
duration: 2500
});
target:目标对象或目标点,3D 场景首选center + zoom:旧式地图视图表达,适合 2D 兼容场景bearing:旋转角;对 target 模式来说,更接近相机航向角pitch:俯仰角roll:横滚角;只有相机姿态型场景才真的有意义duration:动画时长,单位毫秒easing(t):缓动函数,输入 $t \in [0,1]$offset:终点相对屏幕中心的偏移,适合让目标避开弹窗/侧边栏animate: false:退化成无动画flyTo() 额外常见参数:
curve:飞行弧线强度,默认 1.42;越大越“拱”speed:飞行速度,默认 1.2screenSpeed:按屏幕速度估算飞行时长;如果设了 speed,它会被忽略maxDuration:限制最长飞行时间minZoom:飞行过程中的最小缩放级别maximumHeight:飞行过程中的最大高度约束flyOverLongitude / flyOverLongitudeWeight:控制跨经线飞行路径position,什么时候该用 targetMap 初始化参数 → 优先 positiontargetcenter + zoom如果你做的是三维项目,长期最好形成这个习惯:
positiontargetfunction focusSceneObject(id) {
const target = map.getSceneComponent(id);
if (!target) return;
map.flyTo({
target,
pitch: 55,
bearing: 15,
duration: 2000,
curve: 1.42,
speed: 1.2,
offset: [120, 0]
});
}
这个模式适合:
setFilter / setPaintProperty,避免频繁 setStylesetStyleNavigation、Scale、Fullscreen、Geolocate、AttributionFPSControl、ModelTransformationControlBatchAddInstanceControl、EarthRotationControl、Thumbnail调试级和演示级控件不要默认常驻线上业务页面。
Marker + Popup 基础用法const marker = new minemap.Marker({
color: "red",
draggable: true,
offset: [0, -18]
})
.setLngLat([116.39, 39.9])
.addTo(map);
const popup = new minemap.Popup({
closeButton: false,
closeOnClick: false,
offset: [0, -30]
})
.setHTML("<div>设备点位</div>")
.setLngLat([116.39, 39.9]);
marker.setPopup(popup).togglePopup();
MineMap 源码和 demo 都表明:Marker 支持地形场景下的拖拽和高度控制。
常见链路:
setLngLat(...)setAltitude(...)setDraggable(true)setPopup(...)适合编辑点、观测点、设备点位等少量对象。
Popup 单独使用new minemap.Popup({ closeOnMove: true }).setLngLat(e.lngLat).setHTML("<strong>picked</strong>").addTo(map);
如果是跟鼠标走的信息提示,可用 trackPointer();但不要和固定 setLngLat(...) 的逻辑混在一套状态里反复切换。
pitch 与特效开关(SSR、OIT、阴影)queryRenderedFeatures)Marker / Popup 数量要受控,海量点位不要走 DOM 覆盖物flyTo() 更适合明确的导航动作duration,不要在短时间内连续堆多个相机动画minemap-official-resources-and-onboardingminemap-global-configurationminemap-widget-and-controlsminemap-marker-and-popupminemap-style-and-dataminemap-scene-componentsminemap-primitives-and-materialsminemap-events-and-pickingminemap-performance-and-backend