获取全球GeoJSON地理数据(到州县层级)

admin 2026-03-03 09:09:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍获取全球州县层级GeoJSON数据的方法。推荐使用GADM数据库,下载GPKG数据后利用Python的GDAL和GeoPandas库读取图层并转换为GeoJSON。文中提供字段筛选与几何简化代码以优化体积,并提醒注意数据领土主权准确性。 综合评分: 88 文章分类: 安全开发,数据安全,威胁情报


cover_image

获取全球 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 提供的中国国界数据并不符合中国的领土主张,并且省界、市界、区界等数据也未必是最新版本。所以,在正式刊物中发表使用此类数据的图件时,必须格外谨慎。

(二)数据库获取方式

  1. 中文文档:https://docs.gmt – china.org/latest/dataset/gadm/index.html
  2. 下载全球所有国家和地区的所有数据:https://gadm.org/download_world.html# (若无法打开,可能是网络限制原因,需科学上网)
  3. 下载单个数据库:可通过相关页面操作下载,下载后的文件格式为 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 地理数据(到州县层级)》

除夕快乐 网络安全文章

除夕快乐

文章总结: 该文档是蚁景网络安全于2026年2月16日在湖南发布的一篇节日问候推文,核心内容仅为祝愿读者除夕快乐。文档未包含任何网络安全技术分析、行业资讯或实操
评论:0   参与:  0