DataEase 数据可视化大屏:3D 地图与动态效果实现
在企业级数据可视化场景中,3D 地图因其立体展示效果和沉浸式交互体验,成为展示区域数据分布的重要方式。DataEase 作为开源数据可视化分析工具,提供了丰富的 3D 地图配置能力,支持多种数据源接入和动态效果设置。本文将从实际操作出发,详细介绍如何在 DataEase 中构建具有动态效果的 3D 地图大屏。
3D 地图数据准备与加载
DataEase 的 3D 地图功能依赖地理信息数据(GeoJSON 格式)和业务指标数据的结合。系统内置了基础行政区划数据,存储在 mapFiles/ 目录下,例如赵县的地理边界数据 mapFiles/156/156130133.json,其结构包含行政区划编码(adcode)、中心点坐标(center)和多边形边界坐标(coordinates):
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"adcode": 130133,
"name": "赵县",
"center": [114.775362, 37.754341]
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [[[[115.072289, 37.794126], ...]]]
}
}
]
}
开发者可通过 getGeoJsonFile 方法加载自定义区域数据,该方法位于 core/core-frontend/src/views/chart/components/js/util.ts,支持缓存机制避免重复请求:
export const getGeoJsonFile = async (areaId: string): Promise<FeatureCollection> => {
const mapStore = useMapStoreWithOut()
let geoJson = mapStore.mapCache[areaId]
if (!geoJson) {
const res = await getGeoJson(areaId)
geoJson = res.data
mapStore.setMap({ id: areaId, geoJson })
}
return toRaw(geoJson)
}
3D 地图基础配置
在 DataEase 中创建 3D 地图需通过图表样式面板完成核心参数配置,主要包括以下维度:
地图类型与投影方式
系统支持高德、百度、天地图等多种地图服务提供商,可在 core/core-frontend/src/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue 中切换:
const mapStyleOptions = computed(() => {
switch (mapType.value) {
case 'tianditu':
return tdtMapStyleOptions
case 'qq':
return qqMapStyleOptions
default:
return gaodeMapStyleOptions
}
})
3D 效果通过「俯仰角(pitch)」控制,取值范围 0-90 度,角度越大立体感越强:
<el-slider
:min="0"
:max="90"
v-model="state.miscForm.mapPitch"
@change="changeMisc('mapPitch')"
/>
热力图与高度映射
3D 热力图(heatmap3D)是展示区域密度分布的常用形式,通过 core/core-frontend/src/locales/en.ts 定义中英文切换:
heatmap_classics: 'Classic heatmap',
heatmap3D: '3D heatmap'
核心配置参数包括:
- 强度(Intensity):控制热力图颜色梯度变化,范围 1-20
- 半径(Radius):影响热点扩散范围,范围 1-40
- 高度因子:将数据值映射为 3D 高度,需在 core/core-frontend/src/views/chart/components/js/util.ts 中配置动态颜色比例尺:
export const getDynamicColorScale = (minValue, maxValue, intervals, colors) => {
const step = (maxValue - minValue) / intervals
return Array(intervals).fill(0).map((_, i) => ({
value: [minValue + i * step, minValue + (i + 1) * step],
color: colors?.[i]
}))
}
动态效果实现方案
DataEase 3D 地图支持多种动态交互效果,提升数据叙事能力:
视角动画与交互
通过配置「旋转角(rotation)」和「动画时长」实现自动旋转效果,相关代码位于 core/core-frontend/src/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue:
<el-slider
:min="0"
:max="360"
v-model="state.miscForm.mapRotation"
@change="changeMisc('mapRotation')"
/>
支持鼠标拖拽旋转、滚轮缩放等交互,依赖 core/core-frontend/src/views/chart/components/js/util.ts 中定义的地图图表类型检测:
const mapChartTypes = ['bubble-map', 'flow-map', 'heat-map', 'map', 'symbolic-map']
数据驱动动画
通过时间维度数据实现动态变化效果,例如人口流动轨迹动画。在 core/core-frontend/src/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue 中配置动画参数:
<el-select v-model="state.basicStyleForm.heatMapType">
<el-option label="Classic heatmap" value="heatmap"/>
<el-option label="3D heatmap" value="heatmap3D"/>
</el-select>
性能优化与最佳实践
数据分片加载
对于包含大量坐标点的 3D 地图,建议采用分片加载策略。系统通过 core/core-frontend/src/views/chart/components/js/util.ts 中的缓存机制优化重复请求,同时在 core/core-frontend/src/views/chart/components/js/panel/charts/map/common.ts 中实现地图瓦片懒加载。
样式配置建议
| 场景 | 推荐配置 | 代码参考路径 |
|---|---|---|
| 夜间模式 | map_style: 'darkblue' | locales/en.ts#L1904 |
| 省市级行政区划展示 | areaId: '100000'(全国) | util.ts#L497 |
| 实时数据更新 | 开启 autoFit 自动适配数据范围 | BasicStyleSelector.vue#L701 |
常见问题解决
地图加载空白
- 检查 GeoJSON 格式是否正确,可通过 mapFiles/156/156130133.json 验证结构
- 确认地图服务密钥配置,参考 core/core-frontend/src/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue 中的
getMapKey方法
3D 效果卡顿
- 降低「高度因子」参数,减少顶点数量
- 开启数据过滤,通过 core/core-frontend/src/views/chart/components/js/util.ts 过滤异常值:
export const filterChartDataByRange = (data, maxValue, minValue) =>
data.filter(item => item.value == null || (item.value >= minValue && item.value <= maxValue))
总结
DataEase 提供了从数据准备、样式配置到动态交互的完整 3D 地图解决方案,通过本文介绍的 GeoJSON 加载、热力图配置和动画参数调节,可快速构建企业级数据大屏。更多高级功能可参考:
- 官方文档:docs/use-cases.md
- 地图组件源码:core/core-frontend/src/views/chart/components/js/panel/charts/map/
- 动态效果示例:core/core-frontend/src/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue
建议结合实际业务数据,通过「先静态后动态,先2D后3D」的迭代方式构建可视化大屏,平衡展示效果与系统性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



