实现方案
从第三方网站下载到全球的行政区数据导入到PostgreSQL数据库,PostgreSQL数据库具有postgis扩展可以对空间数据进行管理,还有空间函数方便查询处理空间数据
一、数据下载
GADM是一个免费的地图数据集,提供了全球行政区域的GeoJSON数据,官网https://gadm.org/index.html
下载数据
选择世界范围的行政区数据
选择下载数据这里有两种结构的数据,选择最后面一种,这种结构的数据方便查询(之前踩过坑,选择的第一种,到最后根本不知道怎么写查询sql)
二、安装PostgreSQL数据库,并添加postgis扩展
postgresql的postgis扩展是有着存储管理空间数据的能力的开源GIS数据库
这里就不介绍安装过程了,参考https://blog.csdn.net/weixin_43524214/article/details/131077910
三、数据导入
使用ogr2ogr工具将下载的gpkg格式的行政区数据导入到PostgreSQL
安装ogr2ogr工具(以Ubuntu为例)
sudo apt-get install gdal-bin
导入数据库
ogr2ogr -f "PostgreSQL" PG:"dbname=mydatabase user=myuser password=mypassword host=myhost" /path/to/gpkg/file.gpkg -nln mytable -nlt PROMOTE_TO_MULTI
将“mydatabase”替换为目标PostgreSQL数据库的名称,“myuser”和“mypassword”替换为数据库的用户名和密码,“myhost”替换为数据库所在的主机名或IP地址,“/path/to/gpkg/file.gpkg”替换为gpkg文件的路径和名称,“mytable”替换为要创建的新表的名称。
-nln选项指定导入的表名称,-nlt选项将创建的几何列转换为多重几何列,以便与PostGIS兼容。
四、数据查询
select ST_AsGeoJSON(ST_Simplify(geom,0.01)) from table_name
geom是存储几何对象的字段,table_name是表名
这里介绍下ST_AsGeoJSON和ST_Simplify这两个空间函数
-
ST_Simplify函数
用于简化几何对象,减少其顶点数目并近似保留形状。它接受一个几何对象和一个容差值作为参数,并返回简化后的几何对象。(这个函数非常有用,在查询一些比较大的行政区的时候,查询会很慢,用这个函数简化后可以大大提升查询速度) -
ST_AsGeoJSON
用于将几何对象转换为 GeoJSON 格式的字符串表示。它接受一个几何对象作为参数,并返回对应的 GeoJSON 字符串。
数据导入到数据库后还会有行政区名称,级别,所属国家等字段,你可以根据这些字段结合自身需求去查询对应的数据,再把PostgreSQL当成数据源集成到自己的服务当中,这样就实现全球行政区搜索功能啦