com um clique
minemap-fundamentals
MineMap 地图初始化、基础相机参数、生命周期事件、控件添加与清理。用于新建地图、初始化交互、规范化启动流程。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
MineMap 地图初始化、基础相机参数、生命周期事件、控件添加与清理。用于新建地图、初始化交互、规范化启动流程。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
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