ECharts 5.x地图下钻实战:GeoJSON获取与registerMap

发布时间:2026/9/2 16:55:57

ECharts 5.x地图下钻实战:GeoJSON获取与registerMap
简介面向需要在ECharts中嵌入湖南区域地图的前端开发者这份资料提供了湖南省及下辖14个市州的GeoJSON地图数据可直接用于各类地理数据可视化项目。数据包含区域名称、唯一标识与边界坐标且已对各级地名的标签显示位置做了手工校正在缩放或移动地图时能显著减少文字重叠保证标注清晰。压缩包内共有22个文件以15个JSON地图文件为主体另附4个JS处理脚本、1个可直接运行的HTML示例、1个CSS样式文件及1张效果预览图整体仅1.84MB非常轻量。HTML示例完整演示了如何初始化地图、绑定统计值以及设置视觉映射开发者可以参考该结构快速搭建带有颜色分级或数据提示的湖南地图应用比如人口分布、经济指标等场景。已有2302人学习使用适合需要快速交付省级与市级统计地图的数据可视化工程师、报表开发人员或数据分析师。 上个月接了个政务大屏的单子需求是把湖南省以及14个地级市的数据做成一张可点击下钻的地图。我原本估着给 ECharts 塞一个 JSON 就完事结果真正动手才发现光地图数据怎么拿就折腾了小半天老教程里内置的 china.json 在 ECharts 5.x 里已经没了网上很多 CDN 地址也早不是原来那套。这篇文章就把 echart 湖南省及各市地图的完整做法拆开讲从 GeoJSON 获取、registerMap 注册、省市两级下钻到样式调优、移动端适配再把大家最近常搜的为什么访问不了了怎么让最后一个点显示 tooltip这类问题一起收个尾。做政务大屏、统计报表、招商地图这类可视化需求的人可以直接照着做。1. 地图数据从哪来GeoJSON 的获取与清洗1.1 为什么 5.x 之后没有内置地图可用了先说一个很多人踩过的坑ECharts 4 时代npm 包里是有echarts/map/json/china.json的网上几乎所有教程都是直接 import 这个文件然后注册代码短得很。但到了 5.x官方明确不再分发地图数据把内置的省市 JSON 全部移除了。也就是说你照着三四年前的教程做第一步就会报错这就是为什么访问不了了最常见的来源之一。ECharts 本身并没有挂只是地图数据已经不在安装包里了。你要自己准备 GeoJSON 文件再通过echarts.registerMap()去注册这已经是 5.x 的标准姿势。注意只要是 5.x 版本就别再找什么echarts/map/json/china.json了这个路径在源码里根本不存在。1.2 省市级 GeoJSON 从哪找现在最通用的做法是去阿里云 DataV.GeoAtlas 提供的地理数据接口拿边界数据省市县三级都有请求也很简单。拿湖南来说省级地图直接请求这个地址https://geo.datav.aliyun.com/areas_v3/bound/430000_full.json拿到的是一个标准 GeoJSON FeatureCollection每个 feature 对应一个地级行政区包括湘西土家族苗族自治州。需要哪个市的独立地图就把 430000 换成对应的行政区划代码。湖南省 14 个地级行政区的 adcode 我列出来后面做下钻映射的时候直接抄地级行政区adcode长沙市430100株洲市430200湘潭市430300衡阳市430400邵阳市430500岳阳市430600常德市430700张家界市430800益阳市430900郴州市431000永州市431100怀化市431200娄底市431300湘西土家族苗族自治州433100接口地址里带_full的是完整边界文件会包含到县级区划展示更精细不带_full的只到市级轮廓只有几十 KB加载更快。如果只是做省级大图市级轮廓就够用了如果后续要做市到区县的下钻那就得用_full。开发阶段图方便可以直接请求这个接口但生产环境我建议把 JSON 下载下来放到自己的静态目录里后面我会专门讲为什么。1.3 先检查再注册别让脏数据坑你一晚上从接口拿到的 GeoJSON 我建议先格式化看一眼再往代码里放。首先要确认根节点是 FeatureCollection其次每个 feature 的properties里一定要有name字段这个值会作为地图区域的默认名称直接决定后面的 tooltip、事件绑定、数据映射能不能对上。有的渠道下载下来的数据name 可能带空格、简繁体不一致或者市名只有长沙没有市字而你的业务数据里写的是长沙市结果就是地图画出来了但数据颜色一块都不显示。这种情况不用怀疑就是名字对不上。处理办法有两个要么把业务数据的 name 改成和 GeoJSON 完全一致要么在注册后通过nameMap做名字映射。我一般倾向于后者因为业务数据通常来自后端改字段名影响面大用 nameMap 集中处理更安全。另外如果发现地图某些区域形状异常、边界错乱多半是 GeoJSON 里有自相交的坐标点可以用 Mapshaper 这类工具做一次简化修复。这类问题不常见但真遇到的时候靠肉眼排查边界坐标会让人崩溃直接丢进工具里跑一遍反而是最快的。2. 基础地图怎么搭registerMap 与 series-map 核心配置2.1 一个能跑起来的最小示例地图数据就绪后剩下的就是 ECharts 的标准操作了。我习惯用 async/await 把数据加载写得直白一点避免一层层 then 看得头晕。下面这个例子放在一个 HTML 里就能跑!DOCTYPE html html langzh-CN head meta charsetUTF-8 / meta nameviewport contentwidthdevice-width, initial-scale1.0 / script srchttps://cdn.jsdelivr.net/npm/echarts5.5.0/dist/echarts.min.js/script /head body stylemargin:0; div idmap stylewidth:100vw;height:100vh;/div script const chart echarts.init(document.getElementById(map)); (async () { const geoJson await fetch(https://geo.datav.aliyun.com/areas_v3/bound/430000_full.json) .then(res res.json()); echarts.registerMap(hunan, geoJson); chart.setOption({ tooltip: { trigger: item, formatter: {b}br/{c} }, series: [{ type: map, map: hunan, roam: true, label: { show: true, color: #fff, fontSize: 12 }, itemStyle: { areaColor: #1e3a8a, borderColor: #60a5fa, borderWidth: 1 }, emphasis: { label: { show: true }, itemStyle: { areaColor: #f59e0b } } }] }); })(); /script /body /htmlregisterMap的第一个参数是给这张地图起的名字后面series.map必须引用同一个名字。这个 key 不一定要叫 hunan但前后必须一致否则控制台会直接报Map not found。这个报错也是很多人初学阶段最常遇到的。2.2 为什么用 map 系列而不是 geo 组件ECharts 里画地图有两条路一条是geo组件另一条是series-map系列。如果只是画一个静态底图比如只展示边界轮廓geo就够了渲染性能也更好。但要绑定业务数据、按数值给每个市染色就必须用 map 系列因为只有 map 系列能和 visualMap 组件产生数据联动。实际项目中我经常两者混用用 geo 做底图样式再用 map 系列叠加数据层这样可以在不破坏底色效果的情况下单独控制数据呈现。不过对大多数需求来说一个 map 系列已经够用了别一上来就把配置堆得太复杂。2.3 绑定数据与 visualMap 分段配色给湖南各市绑定数据核心是 series.data 里的name要和 GeoJSON 里的properties.name一一对应。我习惯把数据和地图配置分开维护这样 setOption本文还有配套的精品资源点击获取

相关新闻

海康威视NVR SDK开发实战:H.265预览回放与PyQt5对接经验

海康威视NVR SDK开发实战:H.265预览回放与PyQt5对接经验

2026/9/2 16:55:57

简介:海康威视H.265系列NVR SDK资料是一套面向安防软件开发者的二次开发工具包,适合具备C或C#基础、希望构建自定义监控平台或集成NVR能力的工程师。压缩包约20.03MB,按lib、doc、incCn、ClientDemo四个目录组织,集中提供预编译的…

用uni-app与Vuex构建轻量刷题App:从题库设计到本地持久化

用uni-app与Vuex构建轻量刷题App:从题库设计到本地持久化

2026/9/2 16:55:57

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

大模型API实战:构建无尽冬日科技研究规划助手

大模型API实战:构建无尽冬日科技研究规划助手

2026/9/2 16:45:57

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

前端互动事件处理实战:基于React与Zustand构建粉丝社区动态系统

前端互动事件处理实战:基于React与Zustand构建粉丝社区动态系统

2026/9/2 18:06:02

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

分析代理上下文组装实战:从Schema、SQL到Docs构建高质量AI数据查询环境

分析代理上下文组装实战:从Schema、SQL到Docs构建高质量AI数据查询环境

2026/9/2 18:06:02

这阵子在折腾基于大模型的分析型代理(Analytics Agent)时,我发现一个规律:最难的不是写模型调用代码,也不是调提示词模板,而是给代理准备好一份“高质量上下文”。代理能不能从自然语言问题正确生成 SQL&am…

Vue3零基础2小时速成:实战驱动快速上手响应式与组件开发

Vue3零基础2小时速成:实战驱动快速上手响应式与组件开发

2026/9/2 18:06:02

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

游戏代肝工作室线上招募解析:合规化服务与兼职变现指南

游戏代肝工作室线上招募解析:合规化服务与兼职变现指南

2026/9/2 18:06:02

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

GEO优化工程化实践:从试错流程到多模态信源的四步闭环

GEO优化工程化实践:从试错流程到多模态信源的四步闭环

2026/9/2 18:06:02

从工程视角看 GEO优化:它是一套可工程化的闭环,而非"多发内容"。本文拆解试错流程、AI 收录与排名逻辑、多模态信源权重,以及把优化做成项目(目标-现状-问题-复盘)的标准汇报链路,并提示 AI 搜索…

HARPY HARE (SLOWED) 无损音频慢速处理:现代二创的素材解决方案

HARPY HARE (SLOWED) 无损音频慢速处理:现代二创的素材解决方案

2026/9/2 17:56:02

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…