文章总结: 本文介绍获取全球州县层级GeoJSON数据的方法。推荐使用GADM数据库,下载GPKG数据后利用Python的GDAL和GeoPandas库读取图层并转换为GeoJSON。文中提供字段筛选与几何简化代码以优化体积,并提醒注意数据领土主权准确性。 综合评分: 88 文章分类: 安全开发,数据安全,威胁情报
获取全球 GeoJSON 地理数据(到州县层级)
原创
子午猫 子午猫
网络侦查研究院
2026年2月15日 07:46 湖南
在当今数字化的时代,地理数据在众多领域,如地图可视化、数据分析以及各类地理信息系统应用中,都扮演着至关重要的角色。对于许多开发者和研究人员来说,获取到合适精度的地理数据是开展工作的基础。然而,想要获取全球范围且精确到州县层级的 GeoJSON 地理数据,并非易事。本文将详细阐述获取这类数据的方法与步骤,为有相同需求的读者提供参考。
一、背景概述
在一般的全球地图可视化功能中,数据往往只精确到国家地区层级。在 Github 上,我们能够轻松找到一些直接可供下载的 GeoJSON 地理数据,例如全球国家层级的:https://github.com/chenkuangkuang/world-countries-geojson/blob/main/allCountriesGeojson.json?short_path=75d235a 。对于国内地理数据,精确到县层级的 GeoJSON 数据也能在特定平台获取,像:https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=30.332329214580188&lng=106.72278672066881&zoom=3.5 。但博主在 Github 上却未能找到全球精确到二级(州/县层级)且直接可用的 GeoJSON 地理数据,推测可能是由于这类数据量较大的缘故。
在常见的行政层级划分体系里,有着明确的界定:
- 0 级:代表国家,例如德国。
- 1 级:对应州/联邦州,比如德国的拜仁州(Bayern)。
- 2 级:指县/区(Kreis/Landkreis)或直辖市(Kreisfreie Stadt) 。
二、GADM 全球行政区划数据库
#
(一)GADM 简介
GADM,即 Database of Global Administrative Areas,是一个高精度的全球行政区划数据库。它涵盖了全球所有国家和地区的多个级别的行政区划边界数据,包括国界、省界、市界、区界等。不过,需要特别注意的是,GADM 提供的中国国界数据并不符合中国的领土主张,并且省界、市界、区界等数据也未必是最新版本。所以,在正式刊物中发表使用此类数据的图件时,必须格外谨慎。
(二)数据库获取方式
- 中文文档:https://docs.gmt – china.org/latest/dataset/gadm/index.html
- 下载全球所有国家和地区的所有数据:https://gadm.org/download_world.html# (若无法打开,可能是网络限制原因,需科学上网)
- 下载单个数据库:可通过相关页面操作下载,下载后的文件格式为 gpkg(GeoPackage),而非我们常用的 GeoJSON 格式,后续需要进行格式转换。
三、数据格式转换
(一)下载 GDAL
由于博主使用的是 python3.11 版本,因此对应的 GDAL 版本为 cp311 。读者需根据自己本地的 python 版本,下载与之对应的 GDAL 版本。通过以下命令进行安装: pip install https://github.com/cgohlke/geospatial – wheels/releases/download/v2024.9.22/GDAL – 3.9.2 – cp311 – cp311 – win_amd64.whl 同时,还需安装 geopandas 库,命令为:pip install geopandas
(二)获取图层列表
GPKG 是一种基于 SQLite 实现的开源地理数据库格式,它能够存储多种类型的地理数据。通过以下 Python 代码来获取 GPKG 文件中的图层列表:
from osgeo import ogr
gpkg_file = "gadm_410.gpkg"
ds = ogr.Open(gpkg_file)
if ds is None:
print("无法打开 GPKG 文件")
else:
print("图层列表:")
for i in range(ds.GetLayerCount()):
layer = ds.GetLayerByIndex(i)
print(f"- {layer.GetName()}")
(三)提取并转换地理数据
以图层“gadm_410”为例,使用 GeoPandas 读取该图层,并将其转换为 GeoJSON 格式,代码如下:
import geopandas as gpd
# 读取 GPKG 文件中的指定图层
gdf = gpd.read_file("gadm_410.gpkg", layer="gadm_410")
# 查看数据结构
print(gdf.head())
gdf.to_file("global_admin_areas.geojson", driver="GeoJSON")
运行上述代码后,稍作等待,即可成功生成 GeoJSON 文件。
四、数据处理
生成的 GeoJSON 文件中包含较多字段值,部分字段在实际使用中可能并不需要。我们既可以在生成 GeoJSON 文件后进行处理,也可以在此处提前处理。以下代码用于保留国家、省、市名称和几何图形字段,并对几何图形进行简化处理,从而减小文件大小:
columns_to_keep = ['NAME_0', 'NAME_1', 'NAME_2', 'geometry'] # 国家、省、市名称和几何图形
gdf_simplified = gdf[columns_to_keep]
gdf_simplified['geometry'] = gdf_simplified['geometry'].simplify(0.01)
gdf_simplified.to_file("simplified_admin_areas.geojson", driver="GeoJSON")
经过这样的处理,生成的文件大小会显著减小,更便于后续的使用与存储。通过以上步骤,我们便能够获取到全球精确到州县层级的 GeoJSON 地理数据,并根据自身需求对其进行处理和应用。在实际应用中,大家要注意数据的准确性和适用性,特别是涉及到不同国家领土主权相关的数据,务必谨慎对待。
END
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络侦查研究院 子午猫 子午猫《获取全球 GeoJSON 地理数据(到州县层级)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论