本文背景
一般地图可视化的功能可能只到国家地区的层级,github上有很多可以直接下载的GeoJSON地理数据,国内到县的GeoJSON地理数据也有。
但全球的GeoJSON地理数据到省市级别的数据博主在githuab没有找到直接可用的,可能是因为数据比较大,如果有相同业务需求的小伙伴,可以参考本文来获取GeoJSON数据。
数据库获取
https://gadm.org/download_world.html#(打不开的话是因为没科学上网dddd)
下载单个数据库
下载下来是gpkg格式(GeoPackage),不是咱们经常使用的GeoJSON格式,下面来转换,博主比较常用python,熟悉其他语言的小伙伴可以拿代码去让AI转换一下。
下载GDAL
GDAL因为我用的是python3.11版本,所以是cp311,可以根据自己本地的python版本下载对应的版本。
pip install https://github.com/cgohlke/geospatial-wheels/releases/download/v2024.9.22/GDAL-3.9.2-cp311-cp311-win_amd64.whl
pip install geopandas
获取图层列表
GPKG是一种开源的地理数据库格式,基于SQLite实现,可以存储多种类型的地理数据。
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后处理
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")
文件大小会小很多
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)