基于 GeoJSON 的区域着色地图,无需 API Key,纯前端渲染
import * as echarts from 'echarts';
// 1. 加载中国地图 GeoJSON
const geoJson = await fetch(
'https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json'
).then(res => res.json());
// 2. 注册地图
echarts.registerMap('china', geoJson);
// 3. 准备数据
const data = [
{ name: '广东', value: 8650 },
{ name: '江苏', value: 7820 },
{ name: '浙江', value: 6540 },
// ... more provinces
];
// 4. 配置图表
const option = {
tooltip: {
trigger: 'item',
formatter: '{b}: {c} 万元'
},
visualMap: {
min: 0,
max: 10000,
left: 'left',
bottom: 20,
inRange: {
color: ['#E8F4FD', '#5B8FF9']
},
text: ['高', '低'],
},
series: [{
type: 'map',
map: 'china',
roam: true,
emphasis: {
itemStyle: {
areaColor: '#5B8FF9',
shadowColor: 'rgba(0,113,227,0.5)',
shadowBlur: 20,
}
},
data: data
}]
};
chart.setOption(option);
| 参数 | 值 | 说明 |
|---|---|---|
data |
array | 数据数组,包含 name 和 value 字段 |
visualMap.type |
continuous |
连续型视觉映射 |
visualMap.min/max |
number | 数值范围,用于颜色映射 |
visualMap.inRange.color |
array | 颜色渐变数组(顺序色板) |
itemStyle.areaColor |
function | 区域颜色映射函数 |
label.show |
true |
是否显示区域名称 |
label.fontSize |
11px |
标签字号 |
| 特性 | 说明 |
|---|---|
数据格式 |
GeoJSON / TopoJSON,包含 geometry (polygon/multipolygon) 和 properties |
渲染方式 |
Canvas/SVG 绑定 path,无需底图服务,纯前端渲染 |
数据来源 |
阿里云 DataV.GeoAtlas / Natural Earth / 自定义 GeoJSON |
优势 |
无需 API Key,离线可用,加载快,适合静态区域展示 |
| 建议 | 说明 |
|---|---|
| 颜色映射 | 建议使用顺序色板,从浅到深表示数值大小 |
| 数据精度 | 建议使用简化后的 GeoJSON,减少文件大小和渲染负担 |
| 交互设计 | 建议添加 hover 高亮和 tooltip 展示详细信息 |
| 适用场景 | 适合展示区域统计数据,如省份销售额、城市人口分布等 |