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/bashfile="./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 -appendfidone

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

REM 将A49分幅的gdb数据转为一组shp格式的文件,文件夹命名为MergedREM 编码为UTF-8以正确显示属性字段中的中文ogr2ogr -f "ESRI Shapefile" -lco encoding=UTF-8 Merged A49.gdbREM 将当前目录下剩余所有的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文件)中都有不同级别的元素,并且实际上可能只使用其中的一个,因此您仍然可以使用ogr2ogr工具提供的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格式数据如下:

...# @NCLASS|NAME|PINYIN|GNID|XZNAME# @Tstring|string|string|string|string# FEATURE_DATA# @DAK|岙里王村|Aoliwangcun|330226114037|胡陈乡121.68517089 29.388652295# @DAK|坝头村|Batoucun|331022000000|亭旁镇121.310746425 29.0109724900001# @DAK|白岩村|Baiyancun|331082111028|尤溪镇120.971417165 28.7226002200001# @DAK|柏树下村|Baishuxiacun|331082116042|邵家渡街道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 -Gwhitegmt end

绘图结果:

AGNP