2021版1100万国家标准基础地理数据你值得拥有

本文介绍了获取国家标准地理数据并处理成GMT支持的格式的方法。

具体包括:

本文仅供个人科研绘图参考。 用户编制的地图如需向社会公开的,请务必遵守《地图管理条例》的相关规定,依法履行地图审核流程。

数据概览

国家基础地理信息中心于2017年11月开始免费向社会提供1:100万非保密国家基础地理数据库,当前数据为2021年最新版本。该数据库:

有关数据的更多信息,请访问国家地理信息资源目录服务系统。

数据采集​​数据集内容介绍

该数据集包括5类12个特征集,如下图所示:

全国基础地理数据库数据集/

国家基础地理数据库数据集

每个特征集还包括不同级别的物理地理特征。 以BOUL特征集(层)为例:

BOUL 中国及邻近地区各级行政边界(线)层

BOUL/

该数据集包含各级行政区的边界,以国标代码区分:

行政区划界线类型国标代码

海岸线

250200

水系交叉点

260100

外国地区国界

610200

国界(已确定)

620201

国界(未定)

620202

省界

630200

特别行政区边界

630400

地、市、州级行政区划边界

640200

县级行政区划边界

650200

特殊区域边界

670202

其他层次不同要素的分类和编码参见《基本地理信息要素分类及代码》(GB/T 13923-2006)。

此外,还常用AGNP各级行政地名和城乡居住区位坐标(点)图层。

行政地名以政府驻地为依据定位,无国标代码,按CLASS类别区分:

行政地名类型 CLASS 类别

国家名称

AAA

省(直辖市、自治区、特别行政区)行政地名

AB

自治州、盟、地区行政地名

交流电

地级市行政地名

广告

县级市行政地名

AE

县(自治县、旗、自治旗、地级市、市辖区)行政地名

AF

县级区、县级行政区域派出机构地名

股份公司

街道办事处所在地名称

镇行政地名

人工智能

乡镇行政地名

阿杰

建制村地名

AK

镇区、社区名称

学士

自然村、村庄、村民小组名称

BB

牧场、渔点、棚屋名称

公元前

其他

BD

党政机关、党组名称

CA

企业或机构名称

CB

农林牧渔业

抄送

数据处理

直接从网站下载的数据是分为地图框的地理数据库(gdb)数据库文件。 如果需要使用GMT绘制“全国地图”,则需要:

gdb数据库文件合并

使用本社区一贯推荐的GDAL/ORG库,批量合并分框后的gdb数据。 首先解压所有下载的压缩包,得到以.gdb结尾的目录。 目录名称类似H51.gdb、I49.gdb等,然后在这些目录的父目录中执行以下脚本:

Linux系统:

#!/bin/bash
file="./final"
for i in $(ls -d *.gdb)
do
if[ ! -d "$file"]
then
echo"creating final filefolder" 
 ogr2ogr -f 'ESRI Shapefile'$file$i -lco encoding=UTF-8
else
echo"merging……"
 ogr2ogr -f 'ESRI Shapefile'$file$i -update -append
fi
done

 

Windows系统。 注意必须保存为bat文件才能执行。 如果直接复制粘贴到cmd中,会出现错误:

REM 将A49分幅的gdb数据转为一组shp格式的文件,文件夹命名为Merged
REM 编码为UTF-8以正确显示属性字段中的中文
ogr2ogr -f "ESRI Shapefile" -lco encoding=UTF-8 Merged A49.gdb

REM 将当前目录下剩余所有的gdb数据追加Merged,同类shp文件合并。
for/f%%i in('dir /b "*.gdb"')do(
ogr2ogr -f "ESRI Shapefile" -update -append Merged %%i
)

pause

 

如果安装了python环境,还可以选择ogrmerge.py工具进行批量格式转换和合并,具体参见ogrmerge手册。

本节将交通、水系、边界等12类要素合并为一张全国地图,最终转换为12个shp文件。

查询GB代码和CLASS类别

使用ogrinfo查询shp文件中包含哪些元素。 例如,以下命令查询BOUL.shp中包含的GB代码:

ogrinfo -sql "SELECT distinct GB FROM BOUL" BOUL.shp

 

以下命令查询 AGNP.shp 中包含的 CLASS 类别:

ogrinfo -sql "SELECT distinct CLASS FROM AGNP" AGNP.shp

 

提取某些类型的特征

由于每个数据集(一个shp文件)中都有不同级别的元素,并且实际上可能只使用其中的一个,因此您仍然可以使用ogr2​​ogr工具提供的sql查询选项进行提取。

例如:

行政区划BOUL层中的GB代码620201、620202、250200分别为已确定国界、未定国界、海岸线。 那么提取数据并将其转换为GMT格式的命令是:

ogr2ogr -f GMT -where "GB=620201 or GB=620202 or GB=250200" BOUL_sub.gmt BOUL.shp

 

最终GMT图如下:

gmt begin ChinaMap
 gmt plot BOUL_sub.gmt -R70/145/3/55 -JM105/35/6.5i 
gmt end show

 

绘图结果:

ChinaMap/

如果要提取行政地名AGNP层中并入的村庄信息(对应的CLASS为AK),可以使用:

ogr2ogr -f GMT -where "CLASS='AK'" AGNP.gmt AGNP.shp

 

注意,因为CLASS类别是字符串,所以这里需要加引号AK。 GB 代码是整数,因此不需要引号。

最终转换后的GMT格式数据如下:

...
# @NCLASSNAMEPINYINGNIDXZNAME
# @Tstringstringstringstringstring
# FEATURE_DATA
# @DAK岙里王村Aoliwangcun330226114037胡陈乡
121.68517089 29.388652295
# @DAK坝头村Batoucun331022000000亭旁镇
121.310746425 29.0109724900001
# @DAK白岩村Baiyancun331082111028尤溪镇
120.971417165 28.7226002200001
# @DAK柏树下村Baishuxiacun331082116042邵家渡街道
121.257111875 28.8522451100001
...

 

以Windows系统为例,首先将上述数据的编码转换为GB2312,然后使用如下代码进行绘制:

gmt begin AGNP jpg
 gmt set PS_CHAR_ENCODING Standard+
 gmt basemap -R120/121/28/29 -JM10c -Baf
 gmt grdimage @earth_relief_15s -Cgeo
 gmt plot -Sc0.2c -Gred -W0p,black AGNP.gmt
 chcp 936
 gmt convert AGNP.gmt -a2="NAME" gmt text -F+f10p,40+jTL -D0.15c/0.3c -Gwhite
gmt end

 

绘图结果:

AGNP/