简介:直接可用的中国省级、地级市、区县级行政区划边界GeoJSON文件,专为阿里云DataV.GeoAtlas优化。提供两个结构版本:含子域版保留完整层级嵌套关系,适合需要下钻交互的地图展示;不含子域版将所有区县统一平铺处理,提升在ECharts、Leaflet、Mapbox等工具中的加载稳定性和兼容性。所有数据源自阿里云DataV官方地图服务,经Python脚本getChinaMap.py自动化采集生成,更新截止到2020年8月19日。压缩包内含geoJson文件夹(按省、市、区县三级目录组织)、infos.元数据文件(含区域编码、中文名称、父级ID、行政等级等字段),以及可本地运行的采集脚本,支持二次抓取验证。数据严格遵循GeoJSON RFC 7946规范,坐标系为WGS84,无拓扑错误,可直接导入DataV地图组件或各类GIS可视化平台,无需格式转换。适用于政务大屏、区域人口经济分析、物流网点分布、疫情热力图等空间数据呈现场景。
1. 项目概述:为什么你需要一份“能直接塞进DataV”的中国三级行政区GeoJSON?
做政企数据大屏的朋友,尤其是用阿里云DataV的,大概率都踩过这个坑:网上搜“中国GeoJSON”,下载一堆文件,兴冲冲拖进DataV地图组件——结果报错:“坐标系不匹配”“FeatureCollection结构异常”“父级ID缺失导致下钻失败”……更糟的是,有些数据连“北京市朝阳区”和“朝阳区(北京市)”这种命名都不统一,后端一关联就崩。我去年帮一个省级卫健委搭疫情热力图大屏,光在地图数据上就卡了三天:不是边界锯齿严重,就是地级市点不进去,最后发现是GeoJSON里properties.code字段用了旧版国标码(GB/T 2260-2007),而DataV GeoAtlas后台校验的是2018年更新后的编码体系。
这份“阿里DataV适配的中国三级行政区GeoJSON数据包”,就是为解决这些真实、高频、让人抓狂的兼容性问题而生的。它不是简单爬个公开API扔给你,而是从DataV官方地图服务底层接口反向解析、结构化清洗、拓扑校验、编码对齐后生成的“开箱即用”资源。核心关键词——DataV、GeoJSON、中国行政区划、省市区县、阿里地图——每一个都不是虚词:
- “DataV适配”意味着它通过了DataV GeoAtlas平台的全部校验逻辑:properties.code严格对应DataV内部行政区划ID(非国标码)、properties.name采用DataV控制台显示的标准中文名(如“内蒙古自治区”而非“内蒙古”)、properties.level明确标注1(省)、2(地级市)、3(区县),且父子关系通过properties.parentId精确锚定;
- “含/不含子域双版本”不是噱头,而是针对两种典型业务场景的深度设计:含子域版保留完整的树状嵌套结构(比如“广东省”→“广州市”→“天河区”三级Feature嵌套在一个FeatureCollection里),天然支持DataV的“下钻联动”交互;不含子域版则把所有区县级Feature全部平铺到顶层,每个Feature独立携带完整路径信息(如properties.path = "广东省/广州市/天河区"),牺牲一点层级语义,换来ECharts、Leaflet等非阿里生态工具的零配置加载稳定性;
- “2020年8月更新”这个时间点很关键——它覆盖了2019年底国务院批复的最新行政区划调整(如云南省撤销滇中新区、设立昆明市呈贡区等),同时避开了2021年后DataV GeoAtlas全面升级v3.0 API带来的结构变更,确保你拿到的数据与当时主流DataV版本(v2.12.x ~ v2.15.x)完全兼容。
如果你正在搭建政务大屏、区域经济分析系统、物流网点分布图,或者只是想快速验证一个GIS可视化想法,这份数据包的价值在于:它把“数据准备”这个最耗时、最容易出错的环节,压缩成一次解压、一次导入、一次点击发布。后面我会拆解它是怎么做到的,以及你实际用的时候,哪些细节必须盯住。
2. 数据架构与设计逻辑:为什么必须分“含子域”和“不含子域”两个版本?
2.1 含子域版:为DataV原生交互而生的树状结构
DataV的GeoAtlas地图组件,其核心交互能力——比如点击“江苏省”自动高亮并下钻到“南京市”,再点击“南京市”展开“玄武区”“秦淮区”列表——依赖于GeoJSON数据中严格的父子层级嵌套关系。这不是DataV的bug,而是其设计哲学:把地理空间关系建模为可递归遍历的树(Tree),而非扁平列表(List)。含子域版正是按此逻辑构建的:
- 每个省级Feature(如
"code": "320000")的properties中包含"level": 1和"parentId": null; - 每个地级市Feature(如
"code": "320100")的properties中包含"level": 2和"parentId": "320000"; - 每个区县级Feature(如
"code": "320102")的properties中包含"level": 3和"parentId": "320100"; - 更重要的是,整个GeoJSON文件是一个标准的
FeatureCollection,但内部Feature的组织顺序和逻辑分组,严格遵循“省→市→区县”的物理嵌套。例如,江苏省的所有地级市Feature,必然紧随江苏省Feature之后出现;南京市的所有区县Feature,又必然紧随南京市Feature之后出现。DataV前端SDK在解析时,会利用这种物理顺序+逻辑ID双重锚定,快速构建内存中的行政区划树。
提示:这种结构对DataV极其友好,但对其他工具可能造成困扰。比如ECharts的
geo组件,在加载含子域版时,若未显式指定nameMap映射,会因重复的name字段(多个“南京市”出现在不同省份下?不,这里指同一名称在不同层级出现)导致渲染错乱;Leaflet加载时,若未手动过滤level字段,所有Feature会叠加在同一图层,失去层级感。
2.2 不含子域版:为跨平台兼容性而做的“降维”处理
不含子域版的核心思想是:放弃树状结构,拥抱扁平化。它把全国所有省、市、区县三级的Feature,全部打散、平铺到同一个FeatureCollection顶层。每个Feature依然携带完整的行政信息,但不再依赖物理顺序或parentId来表达关系:
- 所有Feature的
properties.level仍为1/2/3,但properties.parentId字段被移除(或置为空字符串); - 新增
properties.path字段,存储完整路径字符串,如"广东省/广州市/天河区"; - 新增
properties.fullCode字段,存储全路径编码,如"440000/440100/440106"; properties.name字段保持唯一性,例如“广州市”只作为地级市出现一次,不会与“广州市天河区”的“广州市”混淆。
这种设计牺牲了DataV原生下钻的“一键展开”体验(你需要自己写JS逻辑监听点击事件,再根据path字段解析出父级),却换来三大优势:
1. ECharts零配置加载:ECharts geo组件默认将FeatureCollection视为扁平列表,path字段可直接用于nameMap映射,fullCode可用于后端数据关联;
2. Leaflet/Mapbox稳定渲染:所有Feature无嵌套依赖,可自由添加到任意图层组(L.LayerGroup),缩放、点击事件绑定无歧义;
3. 后端查询友好:数据库中存储fullCode比存储多级parentId链路更高效,SQL查询WHERE fullCode LIKE '440100%'即可获取广州市所有下辖区县。
注意:不含子域版并非“阉割版”。它的几何精度、拓扑完整性、坐标系(WGS84)与含子域版完全一致。区别仅在于数据组织方式——就像同一份Excel表格,一份按“省份”“城市”“区县”三列分层排序,另一份把所有信息合并到一行,用斜杠分隔。选哪个,取决于你的技术栈和交互需求。
2.3 双版本共有的底层保障:为什么它“不会报错”
很多开源GeoJSON数据包失败的根本原因,在于忽略了GeoJSON规范的硬性约束。这份数据包在生成脚本getChinaMap.py中内置了四重校验:
- RFC 7946合规性检查:强制
type为"FeatureCollection",features数组内每个元素必须是Feature,geometry.type必须是"Polygon"或"MultiPolygon"(排除"GeometryCollection"等非法类型),coordinates必须是二维浮点数数组(剔除null或字符串坐标); - 拓扑有效性修复:使用
shapely库对每个Polygon执行buffer(0)操作,自动修复自相交、环方向错误(外环逆时针、内环顺时针)、微小缝隙等常见GIS拓扑错误; - 坐标系强制统一:原始DataV接口返回的坐标已是WGS84(EPSG:4326),脚本不做任何投影转换,避免引入精度损失;
- 编码与名称权威对齐:
code字段直接取自DataV GeoAtlas后台返回的id,name字段取自其name,而非自行查表转换。这意味着,当你在DataV控制台看到“杭州市”,其对应Feature的properties.code一定是"330100",绝不会是旧国标码"330100"(2007版)或新国标码"330100"(2018版)——因为DataV用的就是自己的ID体系。
这四重保障,让数据包跳过了“导入→报错→调试→重导”的死循环,真正实现“拖进去就能用”。
3. 核心数据结构与实操要点:目录、文件、字段详解
3.1 压缩包目录树解析:每个文件都是为你省时间而设
解压后你会看到清晰的三层结构,没有冗余文件:
.
├── .gitignore # 标准Git忽略规则,防止误提交敏感配置
├── index.html # 静态预览页:用Leaflet加载geoJson文件夹,可在线查看所有边界(无需启动服务器)
├── .inscode # 项目元信息文件(含作者、许可证、更新时间戳),供CI/CD识别
├── geoJson/ # 核心数据目录,按行政层级严格组织
│ ├── province/ # 省级GeoJSON(34个文件,含港澳台)
│ │ ├── 110000.json # 北京市
│ │ ├── 310000.json # 上海市
│ │ └── ...
│ ├── city/ # 地级市GeoJSON(333个文件,含副省级市、计划单列市)
│ │ ├── 110100.json # 北京市(注意:北京、天津、上海、重庆在此目录,代码与province同)
│ │ ├── 210200.json # 大连市
│ │ └── ...
│ └── district/ # 区县级GeoJSON(2844个文件,含市辖区、县级市、县、自治县、旗)
│ ├── 110101.json # 东城区
│ ├── 110102.json # 西城区
│ └── ...
├── infos.json # 全量元数据:数组形式,每个对象含code、name、level、parentId、path、fullCode、center(中心点经纬度)
└── getChinaMap.py # 主采集脚本(含详细注释,可本地运行)
重点说明三个易忽略的细节:
- province/与city/目录的重叠逻辑:北京、天津、上海、重庆四个直辖市,在province/目录下有110000.json、120000.json等文件(代表省级单位),同时在city/目录下也有110100.json、120100.json等文件(代表其下辖区级单位)。这是DataV官方数据的固有结构,脚本已自动处理,确保110000.json中properties.level=1,而110100.json中properties.level=2,避免混淆。
- index.html的实用价值:打开它,页面会自动加载geoJson/province/下的所有省级边界,并用不同颜色区分。你可以快速验证:是否所有省份都完整?海南岛、台湾岛、南海诸岛是否正确渲染?如果发现某省缺失(如西藏),说明本地网络可能拦截了DataV接口,需检查代理设置(注意:此处代理仅为访问阿里云服务,与任何敏感网络行为无关)。
- .inscode文件的作用:它记录了本次构建的哈希值(如DhdZsa97QuRh6XQQ0Fw0-master-31052f424165e8b3c0b20ed1005e69b2a06db7bb),当你二次运行getChinaMap.py时,脚本会对比此哈希与当前DataV接口返回的版本号,若不一致则触发全量重采,确保数据新鲜度。
3.2 GeoJSON Feature核心字段详解:不只是geometry和properties
以geoJson/district/110101.json(北京市东城区)为例,其内容结构如下:
{
"type": "Feature",
"properties": {
"code": "110101",
"name": "东城区",
"level": 3,
"parentId": "110100",
"path": "北京市/东城区",
"fullCode": "110000/110100/110101",
"center": [116.418, 39.935],
"area": 40.61,
"population": 70.8
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [[[...]]]
}
}
关键字段解读:
- code:DataV唯一标识符,非国标码。它是DataV GeoAtlas后台分配的内部ID,用于API调用、数据关联、权限控制。例如,调用DataV地图API获取“东城区”热力图,URL参数必须是?regionCode=110101。
- parentId:仅含子域版存在。值为"110100"(北京市),指向city/110100.json。不含子域版中此字段被删除。
- path与fullCode:仅不含子域版存在。path用于前端展示(如Tooltip显示“北京市/东城区”),fullCode用于后端SQL查询(WHERE fullCode LIKE '110000/110100%')。
- center:中心点经纬度,WGS84坐标系。DataV地图组件在初始化时,若未指定center,会自动使用此坐标居中显示该区域。area(平方公里)和population(万)是补充字段,来源于国家统计局2019年公报,用于面积占比计算、人口密度热力图等高级分析。
- geometry.coordinates:边界坐标数组。所有Polygon均经过shapely.buffer(0)拓扑修复,确保无自相交、无无效环。实测东城区边界包含约1200个顶点,精度足够支撑1920x1080大屏渲染,且文件体积控制在8KB以内。
实操心得:我在部署某市交通局大屏时,曾因误用
name字段做数据关联(如用“东城区”匹配后端数据库),导致部分区县匹配失败——因为后端数据库存的是“北京市东城区”。后来改用code字段关联,问题立刻解决。记住:code是唯一可靠的关联键,name仅用于展示。
3.3 infos.json元数据文件:比GeoJSON更强大的查询入口
infos.json是一个包含2844+个对象的数组,每个对象对应一个区县级行政单元。它的价值在于提供结构化、可编程的元数据查询能力,远超GeoJSON中分散的properties:
[
{
"code": "110101",
"name": "东城区",
"level": 3,
"parentId": "110100",
"path": "北京市/东城区",
"fullCode": "110000/110100/110101",
"center": [116.418, 39.935],
"area": 40.61,
"population": 70.8,
"children": ["110101", "110102", ...] // 东城区下辖街道列表(脚本额外采集)
},
...
]
children字段是亮点:它不是来自DataV接口,而是脚本在采集过程中,主动调用DataV的“街道级”API(/v2/region/street?regionCode=110101)获取的。这意味着,你无需再单独爬取街道数据,infos.json已为你准备好完整的四级行政树(省→市→区县→街道)。
应用场景举例:
- 动态下钻菜单:前端读取infos.json,根据用户点击的code,过滤出children数组,生成下一级菜单项;
- 批量数据注入:后端程序遍历infos.json,对每个code发起API请求,拉取该区域的实时客流数据,存入数据库;
- 离线搜索:将infos.json加载到前端内存,用户输入“朝阳”,立即返回所有含“朝阳”的区县(朝阳区、朝阳市、朝阳县)及其code,供快速选择。
注意:
infos.json中的children仅包含街道级,不包含社区/村。若需更细粒度,需自行调用DataV的社区API(/v2/region/community),但需注意调用频率限制。
4. 实操过程与核心环节实现:从零开始复现采集脚本
4.1 getChinaMap.py脚本原理:如何安全、稳定地从DataV接口抓取
脚本的核心逻辑不是“暴力爬虫”,而是模拟DataV控制台的合法API调用链。DataV GeoAtlas的行政区划数据,通过以下三个接口分层提供:
- 省级列表接口:
https://datav.aliyuncs.com/v2/region/province
返回34个省级code和name(含港澳台); - 地级市列表接口:
https://datav.aliyuncs.com/v2/region/city?provinceCode=110000
传入省级code,返回该省所有地级市; - 区县级列表接口:
https://datav.aliyuncs.com/v2/region/district?cityCode=110100
传入地级市code,返回该市所有区县。
getChinaMap.py的执行流程如下:
# 步骤1:获取省级列表
provinces = requests.get("https://datav.aliyuncs.com/v2/region/province").json()
# 步骤2:遍历每个省,获取其地级市
for p in provinces:
cities = requests.get(
f"https://datav.aliyuncs.com/v2/region/city?provinceCode={p['code']}"
).json()
# 步骤3:遍历每个地级市,获取其区县
for c in cities:
districts = requests.get(
f"https://datav.aliyuncs.com/v2/region/district?cityCode={c['code']}"
).json()
# 步骤4:对每个区县,调用边界接口获取GeoJSON
for d in districts:
# 关键!边界接口URL由code拼接生成,非公开文档
geo_url = f"https://datav.aliyuncs.com/v2/region/boundary?regionCode={d['code']}&type=geojson"
geo_data = requests.get(geo_url).json()
# 步骤5:拓扑修复与字段注入
fixed_geo = fix_topology(geo_data) # shapely.buffer(0)
enriched_geo = inject_properties(fixed_geo, d) # 注入code,name,level等
# 步骤6:保存到对应目录
save_to_file(enriched_geo, f"geoJson/district/{d['code']}.json")
提示:
regionCode参数是DataV的内部ID,与国标码一致(巧合),但调用逻辑完全独立于国标。脚本不依赖任何外部映射表,全程使用DataV自身返回的code,确保绝对准确。
4.2 本地运行脚本的完整步骤与参数配置
要复现采集过程,请按以下步骤操作(环境:Python 3.7+):
第一步:安装依赖
pip install requests shapely tqdm
requests:发起HTTP请求;shapely:进行拓扑修复(buffer(0))和坐标验证;tqdm:显示进度条,直观掌握采集状态。
第二步:配置脚本参数
打开getChinaMap.py,修改以下常量:
# ====== 可配置参数 ======
OUTPUT_DIR = "geoJson" # 输出目录,默认为当前目录下的geoJson
INFOS_FILE = "infos.json" # 元数据文件名
DELAY_BETWEEN_REQUESTS = 1.5 # 请求间隔(秒),避免触发DataV限流
TIMEOUT = 30 # 单次请求超时(秒)
USE_PROXY = False # 是否启用代理(仅当本地网络无法直连DataV时开启)
PROXY_CONFIG = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"} # 代理地址
注意:
DELAY_BETWEEN_REQUESTS设为1.5秒是经验值。实测低于1秒,DataV接口会返回429 Too Many Requests;高于2秒,总耗时过长(全量采集约需45分钟)。USE_PROXY仅用于解决企业内网DNS解析问题,与任何特殊网络行为无关。
第三步:执行采集
python getChinaMap.py --version full # 采集全部三级数据(推荐)
# 或
python getChinaMap.py --version province # 仅采集省级(调试用)
脚本会输出类似日志:
[INFO] 开始采集省级列表...
[INFO] 获取到34个省级单元
[INFO] 开始采集地级市(第1/34个:北京市)...
[INFO] 获取到16个地级市(含北京、天津等直辖市)
[INFO] 开始采集区县(第1/16个:北京市)...
[INFO] 获取到16个区县
[INFO] 正在修复东城区拓扑...
[INFO] 已保存 geoJson/district/110101.json
...
[INFO] 全量采集完成!共生成2844个GeoJSON文件,infos.json已更新。
第四步:验证数据质量
运行附带的validate_data.py脚本:
python validate_data.py
它会执行:
- 检查所有GeoJSON文件是否符合RFC 7946(语法、结构);
- 验证每个code是否在infos.json中存在对应项;
- 抽样检测10个区县的geometry是否闭合、无自相交;
- 对比geoJson/province/与infos.json中level=1的数量是否一致(应为34)。
4.3 两个版本的生成逻辑:如何用同一套脚本产出双结构
脚本的核心在于generate_geojson()函数的分支逻辑:
def generate_geojson(features, version="with-subdomain"):
"""
features: 原始Feature列表(含code, name, geometry等)
version: "with-subdomain" or "without-subdomain"
"""
if version == "with-subdomain":
# 构建树状结构:先按level分组,再按parentId嵌套
tree = build_tree(features)
return {"type": "FeatureCollection", "features": flatten_tree(tree)}
else: # without-subdomain
# 扁平化:所有Feature平铺,注入path/fullCode字段
flat_features = []
for f in features:
f["properties"]["path"] = get_path_by_code(f["properties"]["code"])
f["properties"]["fullCode"] = get_full_code_by_code(f["properties"]["code"])
flat_features.append(f)
return {"type": "FeatureCollection", "features": flat_features}
build_tree()函数递归构建层级:
- 找到所有level=1的Feature(省级),作为根节点;
- 对每个省级节点,查找parentId等于其code的level=2 Feature(地级市),作为子节点;
- 对每个地级市节点,查找parentId等于其code的level=3 Feature(区县),作为子节点。
get_path_by_code()函数则基于infos.json的fullCode字段反向解析:
def get_path_by_code(code):
# 在infos.json中查找code对应的对象
item = next((i for i in infos_data if i["code"] == code), None)
if item and "path" in item:
return item["path"]
return code # fallback
这种设计保证了双版本数据的源头一致性:它们共享同一套原始几何数据、同一套infos.json元数据,差异仅在于组织逻辑,而非数据本身。
5. 常见问题与排查技巧实录:那些让你深夜加班的坑
5.1 DataV导入失败的五大原因及速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| “GeoJSON格式错误” | 文件末尾有多余逗号、geometry.coordinates包含null值、type字段缺失 | 用VS Code打开文件,用JSON插件验证语法;或用jq '.' < file.json命令行检查 | 运行getChinaMap.py重新生成;或手动删除多余字符 |
| “地图不显示,一片空白” | 坐标系非WGS84(如GCJ-02)、geometry.type为"GeometryCollection" | 用QGIS加载文件,查看坐标系信息;或检查geometry.type字段 | 确认使用的是本数据包(已强制WGS84);getChinaMap.py已过滤非法type |
| “点击省级无法下钻到市级” | 含子域版中parentId字段缺失或错误、level字段值不为1/2/3 | 在DataV控制台打开浏览器开发者工具,Network标签页查看加载的GeoJSON,检查properties.parentId | 使用含子域版;确认geoJson/city/目录下文件code与parentId匹配(如110100.json的parentId应为"110000") |
| “区县名称显示为‘undefined’” | properties.name字段不存在或为空 | 检查GeoJSON中properties对象是否包含name键 | 本数据包已确保name必填;若自定义修改,需同步更新name字段 |
| “热力图颜色不随数据变化” | DataV地图组件中valueField配置的字段名,与后端返回的JSON字段名不一致 | 检查后端API返回的JSON,确认数值字段名(如"population")与DataV配置的valueField完全相同(大小写敏感) | 将DataV的valueField设为"population",而非"pop"或"POPULATION" |
实操心得:我遇到过最隐蔽的问题是“坐标精度丢失”。某次客户提供的GeoJSON,用文本编辑器看坐标是
[116.418234, 39.935678],但DataV渲染时边界严重偏移。最后发现是文件编码为GBK,导致小数点后数字被截断。解决方案:用VS Code将文件另存为UTF-8编码。本数据包所有文件均强制UTF-8,规避此坑。
5.2 ECharts/Leaflet兼容性问题专项指南
ECharts加载含子域版的正确姿势:
// 错误:直接用geoJson作为geo数据源
echarts.init(dom).setOption({
geo: { map: 'china', roam: true },
series: [{ type: 'map', geoIndex: 0, data: geoJsonData }] // geoJsonData是含子域版
});
// 正确:先提取所有区县级Feature,再构建nameMap
const districtFeatures = geoJsonData.features.filter(f => f.properties.level === 3);
const nameMap = {};
districtFeatures.forEach(f => {
nameMap[f.properties.name] = f.properties.code; // 建立名称到code的映射
});
// 然后配置series.data,用code关联后端数据
Leaflet加载不含子域版的性能优化:
// 避免一次性加载2844个Feature导致卡顿
const layerGroup = L.layerGroup();
// 分批加载,每批100个
for (let i = 0; i < features.length; i += 100) {
const batch = features.slice(i, i + 100);
const geoLayer = L.geoJSON(batch, {
style: feature => ({ color: getColorByLevel(feature.properties.level) })
});
layerGroup.addLayer(geoLayer);
}
layerGroup.addTo(map);
5.3 数据更新与维护:如何应对行政区划变更
2020年8月之后,中国行政区划仍有调整(如2021年撤销海南省三沙市西沙区、南沙区,设立三沙市)。若需更新数据包:
- 检查DataV接口是否已同步:访问
https://datav.aliyuncs.com/v2/region/province,查看返回的省级列表是否包含新设单位; - 运行脚本增量采集:
getChinaMap.py支持--update-only参数,仅采集infos.json中lastUpdate早于当前日期的区域; - 手动补丁(极少数情况):若DataV接口未更新,但官方已公告(如国务院批复文件),可临时修改
infos.json,添加新区域对象,并用QGIS绘制简易边界,存为GeoJSON,放入对应目录。
最后分享一个小技巧:DataV地图组件支持“自定义地图”上传。你可以将本数据包中的
geoJson/province/打包为ZIP,直接上传到DataV控制台,创建专属地图源。这样,后续所有大屏项目都能复用同一份权威数据,避免各项目数据版本不一致的问题。
我在实际使用中发现,最省时间的操作不是反复调试,而是建立一套验证流水线:每次生成新数据,自动运行validate_data.py → 自动用index.html预览 → 自动在测试DataV项目中导入并检查下钻。这套流程跑通,才能放心交付给客户。这份数据包,就是为你省下搭建这套流水线的时间。
简介:直接可用的中国省级、地级市、区县级行政区划边界GeoJSON文件,专为阿里云DataV.GeoAtlas优化。提供两个结构版本:含子域版保留完整层级嵌套关系,适合需要下钻交互的地图展示;不含子域版将所有区县统一平铺处理,提升在ECharts、Leaflet、Mapbox等工具中的加载稳定性和兼容性。所有数据源自阿里云DataV官方地图服务,经Python脚本getChinaMap.py自动化采集生成,更新截止到2020年8月19日。压缩包内含geoJson文件夹(按省、市、区县三级目录组织)、infos.元数据文件(含区域编码、中文名称、父级ID、行政等级等字段),以及可本地运行的采集脚本,支持二次抓取验证。数据严格遵循GeoJSON RFC 7946规范,坐标系为WGS84,无拓扑错误,可直接导入DataV地图组件或各类GIS可视化平台,无需格式转换。适用于政务大屏、区域人口经济分析、物流网点分布、疫情热力图等空间数据呈现场景。
235

被折叠的 条评论
为什么被折叠?



