type
Post
status
Published
date
Jan 19, 2026
slug
summary
tags
category
技术分享
password
这是一段基于 Vue 3 和 Cesium.js 开发的三维地图核心逻辑代码。它主要负责地图的初始化、底图加载、矢量数据(GeoJSON)渲染、点位标注(Primitive)以及用户交互(鼠标移动、点击)。
// 图片为案例仅供参考

以下是代码的详细备注解析、功能罗列以及地图显示的关键点说明。
1. 代码核心功能备注解析
为了方便理解,我将代码拆解为几个核心模块进行备注说明:
模块一:地图初始化 (initMap)
这是 Cesium 启动的第一步,主要负责创建一个“干净”的地球容器,并配置相机的行为。
模块二:底图加载 (initBaseLayer)
这是地图“有内容”的关键,加载天地图(或其他 WMTS 服务)。
模块三:数据渲染与交互
addGeoJsonSingleLayer: 加载 GeoJSON 数据(如行政区划边界)。支持多边形(Polygon)填充和轮廓,以及线(Polyline)的虚线/实线样式。
addPrimitivePointsLayer: 高性能点位渲染。它没有使用 Entity API,而是直接操作底层的Primitive(BillboardCollection 和 LabelCollection),适合渲染成千上万个点位。
getMousePosition: 监听鼠标移动,将屏幕坐标(Cartesian2)转换为经纬度,用于页面左下角显示坐标信息。
initMapLeftClick: 监听左键点击,获取点击对象的 ID,并更新到 Pinia Store (spaceStore) 中,用于业务联动。
2. 代码功能罗列
这段代码实现了以下具体功能:
- 地图容器初始化:构建一个精简的、无默认控件的 3D 地球场景。
- 多源底图叠加:支持通过 WMTS 协议加载天地图底图和注记图层。
- 视图控制:
- 限制了用户的最大缩放高度。
- 自定义了鼠标的操作习惯(缩放、倾斜按键映射)。
- 提供
setCameraByLonLatHeight函数用于代码控制相机视角飞向指定位置。
- 矢量数据可视化 (GeoJSON):
- 绘制行政区划面(支持透明度、填充色)。
- 绘制边界线(支持实线、虚线配置)。
- 海量点位标记 (Primitives):
- 通过
Primitive方式高性能渲染图标(Billboard)和文字(Label)。 - 支持避让逻辑(防遮挡)和按距离显示。
- 交互反馈:
- 实时显示鼠标所在位置的经纬度。
- 点击地图要素触发业务逻辑(更新 Store)。
- 异步加载保障:提供了
getViewerAsync和getTileLoadedAsync方法,确保在外部调用地图 API 时,地图核心对象已经初始化完成。
3. 地图出现的关键因素
要让地图在页面上正常显示出来,以下三个条件缺一不可:
第一关键:DOM 容器的宽高 (id="mapLocation")
在 HTML 模板中:
关键点:
div 必须有具体的宽度和高度。如果父容器高度为 0,Cesium 虽然初始化了,但用户看不到任何东西。这里使用了 Tailwind 类 w-full h-full,确保它撑满父容器。第二关键:initMap 的调用与 Viewer 创建
在
onMounted 的 nextTick 中:关键点:
new Cesium.Viewer 必须执行。它会注入 Canvas 到上面的 div 中。注意代码中特意配置了 imageryProvider: new Cesium.SingleTileImageryProvider(...) 加载了一张纯白图片。- 如果没有这一步,Cesium 可能会尝试加载默认的 Bing Map,如果没有配置 Bing Token,可能会报错或显示红叉,或者显示默认的深蓝色星空球。
- 现在的配置下,执行完这一步,你只会看到一个纯白色的球体。
第三关键:initBaseLayer 的 URL 配置 (真正的地图纹理)
这是地图拥有“卫星图”或“电子地图”外观的原因:
关键点:
- 代码读取了
environment.VITE_TIAN_DI_TU_MAP。
- Token 是否有效:天地图现在需要 Key (Token)。如果环境变量中的 URL 没有带 Key 或者 Key 失效,请求会报 403 错误,球体依然是白色的,或者出现网格加载失败。
- 此函数向白色球体上覆盖了真正的地图瓦片。
总结流程
- Vue 挂载 (
onMounted) -> 等待 DOM 更新 (nextTick)。
initMap: 创建 Canvas,画出一个白色的球。
initBaseLayer: 向白色球上贴上天地图的瓦片图片。
setCamera...: 将相机从太空视角瞬间拉到重庆上空 (longitude, latitude配置),让你看到具体的地图细节。
- Author:Ashland
- URL:http://preview.tangly1024.com/article/2edcccc0-3782-8038-b554-d8358e21678d
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!




