动态生成最新行政区划 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. 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II

    Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...

  2. 【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

    代码主体是GPT帮我写的,我觉得这个功能非常实用. 解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image = ImageOps.exif_trans ...

  3. 【ROS】1.1 ROS基本命令介绍

    原视频 ROS基本命令 右键新标签页查看大图! have to do Command Command Result 中文解释 图示 roscore Open the core of the ROS. ...

  4. Python 深拷贝 vs 浅拷贝

    在一些业务场景中, 有时候我们需要复制一个对象, 但是又不想对原来的对象产生影响, 就想搞个 副本 来为所欲为地操作嘛. 但是呢, 在 Python中呢, 又不能通过 赋值 的方式达到效果, 为啥呢? ...

  5. RPC实战与核心原理之分布式环境下如何快速定位问题

    分布式环境下如何快速定位 回顾 如何建立可靠的安全体系,关键点就是"鉴权",我们可以通过统一的鉴权服务动态生成秘钥,提高 RPC 调用的安全性. 分布式环境下定位问题有哪些困难 举 ...

  6. mysql8忘记原始密码如何进入问题

    原文链接 http://codebay.cn/post/9447.html 再不找到今天差点要通宵 Mark起来~ 实测mysqld –skip-grant-tables这样的命令行,在mysql8中 ...

  7. Postgresql12主备流复制操作过程以及原理【pg_basebackup】

    原理介绍:流复制(Streaming Replication).流复制提供了将 WAL 记录连续发送并应用到从服务器以使其保持最新状态的功能.通过流复制,从服务器不断从主服务器同步相应的数据, 同时, ...

  8. win10系统 wsappx消耗内存导致死机

    问题描述:win10系统开机后,wsappx内存占用率一路飙升,直至电脑蓝屏,手动kill后,过一会死灰复燃. 问题解决:win+R输入 regedit 跳转注册表编辑器,找到 HKEY_LOCAL_ ...

  9. Spring Boot 整合ActiveMQ实现延时发现消息

    生产者提供两个发送消息的方法,一个是即时发送消息,一个是延时发送消息.延时发送消息需要手动修改activemq目录conf下的activemq.xml配置文件,开启延时.本文中maven依赖文件和ap ...

  10. 「Log」2023.8.21 小记

    序幕 七点到校,管理整理博客. 然后开始写博客,SAM 的. 学长开始讲题,2-SAT,还算好理解,写完博客过了下板子题. \(\color{royalblue}{P4782\ [模板]2-SAT 问 ...