بنقرة واحدة
minemap-style-and-data
MineMap 样式规范(style v8)、source/layer 管理、图标资源、GeoJSON 更新与数据源组织,重点补全 VectorTileSource 参数与约束。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
MineMap 样式规范(style v8)、source/layer 管理、图标资源、GeoJSON 更新与数据源组织,重点补全 VectorTileSource 参数与约束。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف 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-style-and-data |
| description | MineMap 样式规范(style v8)、source/layer 管理、图标资源、GeoJSON 更新与数据源组织,重点补全 VectorTileSource 参数与约束。 |
map.on("style.load", () => {
map.addSource("poi", {
type: "geojson",
data: { type: "FeatureCollection", features: [] }
});
map.addLayer({
id: "poi-circle",
type: "circle",
source: "poi",
paint: {
"circle-radius": 5,
"circle-color": "#2d8cf0"
}
});
});
MineMap 使用 style spec version: 8,核心字段仍然是:
sourceslayersspriteglyphsvectorrastergeojsonimage补充结论:
3d-model / 3d-tiles source/layer 方式已不推荐map.addSceneComponent()addLayer(layer, before?)removeLayer(id)moveLayer(id, beforeId?)setFilter(layerId, filter)setLayoutProperty() / setPaintProperty()可用 addSourceGroup(id, source) 处理多份 GeoJSON 异步合并;引擎会先注入临时数据,避免 addLayer 时 source 不存在。
loadImage(url, cb) + addImage(id, image, options)loadImages([{ id, url, imageOptions? }], cb, options)updateImage(id, image)hasImage(id) / removeImage(id) / listImages()最近版本补充结论:
loadImages 当前主路径是描述符数组,不再推荐只传 string[]addImage(...)id、url、isOk、image/errorimageOptions,会透传到内部 addImage(...)兼容说明:
string[] 仍兼容,但已进入弃用兼容模式addImage(...)source/index.js 暴露了几类容易漏掉、但确实属于正式开发面的数据入口:
WMTSCapabilitiesoptionsFromCapabilities(...)setRTLTextPlugin(...)getRTLTextPluginStatus()minemap.util.getJSON(...)minemap.util.getString(...)这些更适合放在“数据接入层”。
这一节以 source/data-source/source-cache/VectorTileSource.js 为准,不按旧博客或旧版 Mapbox 经验脑补。
VectorTileSource 是 MineMap 里最重要的业务 source 之一,典型用于:
map.addSource("road-source", {
type: "vector",
tiles: ["https://example.com/mvt/{z}/{x}/{y}.pbf"],
minzoom: 1,
maxzoom: 20
});
type: 'vector'urltilesschemeprojectionattributiontileSizeminzoommaxzoomboundsadcodepromoteIdadaptTerrainurl 和 tiles两者二选一即可:
url:通过 TileJSON 地址间接拿瓦片描述tiles:直接给瓦片模板 URL 数组业务上更常见的是直接给 tiles。
scheme注释给的标准值:
xyztms默认是 xyz。
projection注释写法是字符串,如 MERCATOR;源码里实际走投影类型判断。
实际建议:
tileSize这是最容易被写错的点。
源码构造器里直接做了硬校验:
vector tile sources must have a tileSize of 512也就是说:
VectorTileSource 的 tileSize 必须是 512minzoom / maxzoom源码真实默认值来自 LayerZoomConfig.VECTOR_DEFAULT_ZOOM:
minzoom = 0maxzoom = 20这点比一些注释旧文本更重要,因为运行时实际就是这么取默认值。
使用建议:
maxzoom 往上提maxzoom 也只是继续放大旧层级bounds格式:
[west, south, east, north]作用:
adcode这是 MineMap 自己扩的重点参数。
含义:
源码还实现了 adcode 的 setter:
因此它不是静态元数据,而是可以作为运行时切区工具使用。
前提:
promoteId作用:
可写法:
这是做 setFeatureState()、交互高亮、运行时状态染色时的重要前置。
adaptTerrain这是 MineMap 的重点扩展能力。
作用:
源码注释明确写了边界:
LineStyleLayer、FillStyleLayer这点很关键:
adaptTerrain 当成“万能贴所有三维表面”clippingPlanes源码里 VectorTileSource 也挂了 clippingPlanes 字段,但这不是常规对外主能力,技能库不把它当作常规 vector source 首选参数。
map.addSource("road-source", {
type: "vector",
tiles: ["https://example.com/mvt/{z}/{x}/{y}.pbf"],
tileSize: 512,
minzoom: 1,
maxzoom: 20,
bounds: [112, 28, 114, 30],
promoteId: "id"
});
map.addSource("line-source", {
type: "vector",
tiles: ["https://example.com/mvt/{z}/{x}/{y}.pbf"],
tileSize: 512,
adaptTerrain: true,
minzoom: 1,
maxzoom: 20
});
优先 vector 的典型场景:
source-layer优先 geojson 的典型场景:
loadImages 新主路径map.loadImages(
[
{ id: "cat", url: "https://example.com/cat.png", imageOptions: { pixelRatio: 2 } },
{ id: "dog", url: "https://example.com/dog.png" }
],
(error, result) => {
if (error) console.error(error);
console.log(result);
},
{
onProgress: (loaded, total) => console.log(loaded, total)
}
);
这条路径的优点是:
addImage(...)loadImages 兼容旧写法时要知道的边界const legacyUrls = ["https://example.com/cat.png"];
map.loadImages(legacyUrls, (error, images) => {
if (!error) {
map.addImage("cat", images[legacyUrls[0]]);
}
});
这是兼容路径,不是当前推荐路径。
addSource / addLayer 先后添加的当前行为最近 master 有专门修复 addSource、addLayer 场景下“不加载”的问题,但该修复主要落在历史 3d-model source/layer 路径。
对 style/source/layer 的常规结论是:
map.addSource(...) 会先执行 _lazyInitEmptyStyle()style.addSource(...)_update(true)因此在空样式、晚绑定样式或运行时动态加 source/layer 的场景里,现版本比旧版本更稳。
但推荐顺序仍然不变:
style.load 后添加map.on("style.load", () => {
if (!map.getSource("lineSource")) {
map.addSource("lineSource", { type: "geojson", data: geojson });
}
if (!map.getLayer("lineLayer")) {
map.addLayer({ id: "lineLayer", type: "line", source: "lineSource" });
}
});
对于 vector source,如果服务端数据更新而 source id 不变,优先触发 reload 或切换服务参数,不要反复销毁整套 layer/source。
const parser = new minemap.WMTSCapabilities();
const capabilities = parser.read(xmlText);
const wmtsSource = minemap.optionsFromCapabilities(capabilities, {
layer: "img",
matrixSet: "EPSG:4326",
format: "image/png"
});
map.addSource("wmts", wmtsSource);
适用场景:
minemap.setRTLTextPlugin("https://example.com/rtl-text.js");
约束:
getRTLTextPluginStatus() 只用于状态判定,不替代初始化逻辑paint/layout/filter,少做整套 setStyleVectorTileSource,不要把所有内容一次性灌进 GeoJSONVectorTileSource 的 bounds、minzoom、maxzoom 要收紧promoteId 提前设计好,避免后期 feature-state 很难补queryRenderedFeatures 指定 layers 范围,减少遍历loadImages 批量图标场景优先用 maxConcurrent、timeout、retryCount 做受控加载,不要手搓一层并发队列minemap-fundamentalsminemap-anti-aliasingminemap-layer-systemminemap-style-systemminemap-2d-3d-overlay-and-classificationminemap-water-surface-and-refractionminemap-scene-componentsminemap-events-and-picking