动态生成最新行政区划 GeoJSON 数据并结合 ECharts 实现地图下钻功能

在开发基于地图的数据可视化应用时,一个常见的挑战是获取准确且最新的行政区划边界数据(GeoJSON)。许多现有的在线资源可能数据陈旧,无法反映最新的行政区划调整。本文将介绍一种解决方案,通过调用高德开放平台的 API 动态获取最新的行政区划边界,并结合 ECharts 实现可下钻的地图可视化。

第一部分:通过高德开放平台 API 获取行政区划边界数据

高德地图提供了强大的“行政区查询服务”(AMap.DistrictSearch),可以实时获取全国范围内的行政区划信息,包括其地理边界。

1. 准备工作:引入 API 与申请 Key

首先,您需要到高德开放平台申请一个 Key,用于 API 调用。然后,在页面中引入高德地图的 JS API 脚本。

<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.11&key=「您申请的key值」&plugin=AMap.DistrictSearch"></script>

2. 调用接口获取行政区列表

通过实例化 AMap.DistrictSearch 并调用其 search 方法,可以获取指定区域的下一级行政区列表。以获取中国所有省级单位为例:

// 初始化行政区查询实例
const opts = {
subdistrict: 1, // 返回下一级行政区
showbiz: false // 最后一级不返回街道信息
};
const district = new AMap.DistrictSearch(opts); // 查询“中国”的下一级行政区
district.search('中国', (status, result) => {
if (status === 'complete') {
// result.districtList[0] 包含了省级列表数据
processData(result.districtList[0], 100000);
}
});

3. 获取 GeoJSON 格式的边界数据

获取到行政区列表后,需要利用 AMapUIDistrictExplorer 模块来加载指定区域的边界数据(feature)。

function loadMapData(areaCode, callback) {
AMapUI.loadUI(['geo/DistrictExplorer'], DistrictExplorer => {
const districtExplorer = new DistrictExplorer(); districtExplorer.loadAreaNode(areaCode, (error, areaNode) => {
if (error) {
console.error(error);
return;
} // 构建标准的 GeoJSON 对象
const geoJson = {
type: "FeatureCollection",
features: areaNode.getSubFeatures() // 获取子区域的边界数据
}; callback(geoJson);
});
});
}

关键点areaNode.getSubFeatures() 返回的是一个 feature 数组,为了符合标准的 GeoJSON 格式,需要将其包裹在一个 { "type": "FeatureCollection", "features": [...] } 结构中。

第二部分:使用 ECharts 渲染地图

获取到标准的 GeoJSON 数据后,便可以利用 ECharts 将其渲染为地图。

1. 引入 ECharts 库

在项目中引入 ECharts 库,例如使用 CDN:

<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/dist/echarts.min.js"></script>

2. 注册并配置地图

在 ECharts 中,使用 echarts.registerMap 方法注册刚才获取的 GeoJSON 数据,然后在 option 中配置 series-map

// 假设 geoJsonData 是上一步获取到的数据
// 假设 myChart 是已经初始化的 ECharts 实例 // 注册地图
echarts.registerMap('currentMap', geoJsonData); // 配置 ECharts Option
const option = {
series: [{
type: 'map',
map: 'currentMap', // 使用刚刚注册的地图
roam: false,
itemStyle: {
// ...样式配置
},
data: [ /* 业务数据 */ ]
}]
}; myChart.setOption(option);

执行此步骤后,即可成功渲染出对应的行政区划地图。

第三部分:实现地图下钻功能

地图下钻功能的核心是监听 ECharts 的点击事件,获取被点击区域的 adcode,然后重复第一步和第二步的过程,获取并渲染更深层级的地图。

1. 监听 ECharts 点击事件

myChart.on('click', (params) => {
// params.data 中应包含下一级区域的 adcode
const cityCode = params.data.cityCode;
const level = params.data.level; if (level === 'street') return; // 如果是街道级别,则不再下钻 // 使用 cityCode 再次调用高德API获取下一级数据
district.search(String(cityCode), (status, result) => {
if (status === 'complete' && result.districtList.length > 0) {
// 获取新的 geoJson 并重新渲染 ECharts
loadMapData(cityCode, (geoJson) => {
// ...重新执行注册和渲染的逻辑...
});
}
});
});

:上述代码示例为核心逻辑展示,具体实现时可结合 Vue、React 等框架进行封装。


总结与资源

通过上述方法,可以构建一个数据实时、支持无限层级下钻的动态地图应用,有效解决了静态 GeoJSON 数据陈旧的问题。

对于希望直接查看完整实现或获取预生成数据的开发者,可以参考以下资源:

2025年7月份实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】的更多相关文章

  1. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  2. 2022年实时最新省市区县乡镇街道geojson行政边界数据获取方法

    geojson 数据下载地址:https://hxkj.vip/demo/echartsMap/ 可下载的数据包含省级geojson行政边界数据.市级geojson行政边界数据.区/县级geojson ...

  3. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...

  4. echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新

    目录 ECharts Map地图的显示 GeoJSON数据文件获取 在ECharts中绘制浙江省的数据 ECharts Map地图的显示 ECharts支持地理坐标显示,专门提供了一个geo组件,在s ...

  5. 最新百度地图支持Fragment(注意事项)(转)

    原文: 最新百度地图支持Fragment(注意事项)   开篇:老的百度地图通常都要继承MapActivity,这样不利于代码的可扩展性,再加上Fragment的流行,老的百度地图已经远远不能满足的大 ...

  6. C#+ArcGIS Engine 获取地图中选中的要素

    转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...

  7. AE 获取地图上当前选中的要素

    樱木 原文 AE开发----获取地图上当前选中的要素 Code1 int selCount = axMapControl1.Map.SelectionCount; IEnumFeature pEnum ...

  8. 最新获取SkyDrive音乐外链mp3地址方法20131003

    最新获取SkyDrive音乐外链方法20131003在文章底部更新,欢迎使用! 这已经是第三次写获取SkyDrive音乐外链mp3地址方法的文章了,因为第一次.第二次都失效了.三篇文章都有个共同点,都 ...

  9. 全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图最新数据免费下载 支持shp geojson json sql格式

    关键词: 省市区三级, 乡镇四级, 全国, 行政区划, 坐标边界, 矢量数据, 地理围栏, 免费下载, 2018 2019 2020 2021 2022年份, 最新数据, 长期更新, 开源维护, 支持 ...

  10. java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)

    首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...

随机推荐

  1. SQL 强化练习 (七)

    继续 sql 练习, 不能停下来的哦, 通过这一系列的搬砖操作, 相信在日常业务的sql 应该是能达到相对清楚地写出来的, 尤其是我做数据分析这块, 感觉真的每天都要写才行, 之前都是用 Python ...

  2. 如何医治一条慢SQL?

    前言 "苏工,订单列表又崩了!" 接到电话时,我对着监控大屏上999ms的SQL响应时间哭笑不得. 几年来,我发现一个定律:所有SQL问题都是在凌晨三点爆发! 今天抽丝剥茧,教你用 ...

  3. Win32汇编学习笔记11.游戏辅助的实现

    Win32汇编学习笔记11.游戏辅助的实现-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 游戏基址 游戏基址的概念 游戏基址是保持恒定的两部分内存地址的一部分并提 ...

  4. odoo里固定form表单上的header

    固定form表头header实现方式   修改全局样式:加个position: fixed;  即可 .o_form_view .o_form_statusbar { position: fixed; ...

  5. 转-Linux iostat命令快速入门

    Linux系统出现了性能问题,一般我们可以通过 top.iostat.free.vmstat和ifstat等命令来初步定位问题.其中iostat可以给我们提供丰富的IO性能监控数据. 基本使用 ios ...

  6. 你认为Vonajs提供的这些特性会比Nestjs更好用吗?

    Nestjs是一款非常强大的Node.js框架,而且入门非常容易,但是随着项目的增长,各种不便之处就会显现出来,许多代码书写起来不再像项目刚启动时直观.而Vonajs是一款全新的Node.js框架,提 ...

  7. 【深度评测】Joomla Auto Readmore插件:自动提取缩略图+智能摘要,双引擎驱动内容效率革命

    "文章缩略图与摘要分离管理.重复上传图片.移动端封面图比例失调--"这些Joomla站长的经典痛点,如今被Auto Readmore插件的全自动缩略图提取功能彻底终结.本文将深度解 ...

  8. 不写代码,让 AI 生成手机 APP!保姆级教程

    你现在看到的 APP,是我完全用 AI 生成的,一行代码都没写!怎么做到的呢? 大家好,我是程序员鱼皮.AI 发展很快,现在随随便便就能生成一个网站,但是怎么纯用 AI 开发能在手机上运行的 APP ...

  9. 数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验

    在这个数据如潮的时代,SQL 已远远超越了简单的查询语言范畴,它已成为数据分析和决策制定的基石,成为撬动企业智慧决策的关键杠杆.SQL 的编写和执行效率直接关系到数据处理的速度和分析结果的深度,对企业 ...

  10. upload-labs靶场通关教程

    upload-labs靶场通关教程 Pass-01 我们先上传带有一句话木马的1.php 查看页面源代码发现是前端js弹窗,我们直接禁用前端即可. 再进行上传1.php,我们就可以上传了. Pass- ...