反地理查询系统中我们讲到GADM提供的数据时不符合我国的领土主张的。今天要介绍的这份数据是《1:100万全国基础地理数据库》
数据介绍
全国1:100万基础地理数据覆盖全国陆地范围和包括台湾岛、海南岛、钓鱼岛、南海诸岛在内的主要岛屿及其临近海域,共77幅1:100万图幅,该数据整体现势性为2015年。数据采用2000国家大地坐标系,1985国家高程基准,经纬度坐标。
为满足广大社会群众对地理信息数据资源的需求,经国家测绘地理信息局同意,提供部分1:100万免费下载的数据。下载数据均采用1:100万标准图幅分发,内容含行政区(面),行政境界点(领海基点),行政境界(线),水系(点、线、面),公路、铁路(点、线),居民地(点、面),居民地地名(注记点),自然地名(注记点)等12类要素层。
分幅编号及范围
1:100万地形数据(2017版)的图幅总数为77幅,分幅数据按照GB/T13989-2012《国家基本比例尺地形图分幅和编号》执行。空间存储单元为6°(经差)×4°(纬差)。
坐标系统
- 平面坐标系:2000国家大地坐标系。
- 高程基准:1985国家高程基准。
- 地图投影:分幅数据采用地理坐标,坐标单位为度。
几何精度
更新后地物点对于附近野外控制点的平面位置和高程中误差符合下表的要求,以两倍中误差值为最大误差。
- 平面位置误差100~500
- 高程误差50~200
现势性
1:100万地形数据现势性与更新使用的数据源的现势性一致,数据整体现势性达到2015年。
目前提供下载的1:100万地形数据共有5个数据集12个数据层。
数据分层的命名采用四个字符,第一个字符代表数据分类,第二三个字符是数据内容的缩写,第四个字符代表几何类型。
获取方法
数据地址:http://www.webmap.cn/commres.do?method=result100W
此页面本身没有下载链接。想要下载数据先要注册账号。注册完成后:
- 在首页进入数据下载页面,选择1:100万全国基础地理数据库,点击查询,进入查询页面
- 在查询页面选择自己所需要的范围内的图幅,点击加入成果车。数据类型默认为矢量地图数据,比例尺默认为1:100万,此选项下即为1:100万全国基础地理数据库,共有77幅数据。
- 选择完成后,点击左侧成果车进行结算,结算过程中登记下载使用的用途对象等信息以及下载者的信息,用途的填写务必在20字以上,通过结算即可进行下载,结算过程不收费。
- 注意:关闭结算完成的页面后想要下载,可以在右上角点击自己的账户进入账户信息页面,点击我的订单进行查看和下载。
最终结果为77条数据:
数据使用
可以看到数据被分割成了77份,想要使用,如果我们想要使用这部分数据,首先需要先将这77份数据合并起来。查了下网上的资料,大家都推荐使用的是ArcGIS进行合并。
1、数据合并
安装完ArcGIS后使用ArcMap中的ArcToolbox工具箱进行数据合并:ArcToolbox->数据管理工具(Data Management Tools)->常规(General)->合并(Merge)
这里选择BOUA表示的是我们想要的是各级行政区。合并后数据样式:
2、消除分割线
ArcToolbox->数据管理工具(Data Management Tools)->制图综合(Generalization)->-融合(Dissolve)
勾选PAC和NAME字段,想要留下来,自动生成的自动不要勾选(如Shape_Length等)
其他方案
来源地址:全国县市边界数据的处理(1M2017版)
- 将下载下来的77副gdb数据,全部解压到一个目录中,比如1M2017目录,并在其中建立一个shp子目录。
- 在shell下,使用ogr2ogr命令,将所有gdb文件转换为一个大的shape文件,注意需要将其中的NAME字段编码转换为UTF8编码(官方是GBK编码)。
- 使用ogr2ogr,对合并后的BOUA(面状边界数据)文件根据PAC字段进行再次图形合并(因为默认的分幅会保留大量的正方形),生成shp文件。
- shp文件包含了大量了国外数据、海洋数据,这些数据可以通过ogr2ogr再次剔除,即设置PAC字段>100000且不等于250100,然后生成output2.shp文件。
- 仔细观察shp文件,发现其中存在大量的拓扑错误(分幅边线的交叉遗留),在QGIS3中使用v.clean工具进行错误检查和处理,生成output3.shp文件。
- 对shp文件进行人工错误检查(可借助QGIS3的图形检查工具checkvalidity辅助检查),使用编辑工具(以及高级数字化工具)进行错误修复,主要使用节点编辑工具(删除节点)、多边形合并工具、多边形part删除工具等,最终生成全国(含港澳台)的县级边界数据集boua_cnty.shp。
- 使用QGIS3在boua_cnty数据中添加一个虚拟字段pac_city,并将其值定义为floor(PAC/100),然后对其执行dissolve操作,若需要将直辖市也当做一个独立城市边界,则需要单独处理一下四个直辖市的属性(将县区进行合并,主要是天津和重庆),形成全国市级边界数据集shp文件。
参考代码:
for i in `ls -d *.gdb`; do ogr2ogr -f "ESRI Shapefile" -lco ENCODING=UTF-8 -append shp $i; done ogr2ogr -f "ESRI Shapefile" output1.shp -lco ENCODING=UTF-8 -dialect sqlite -sql "select st_union(geometry) as geometry, PAC, NAME from 'BOUA' group by PAC, NAME order by PAC, NAME" shp/BOUA.shp ogr2ogr -f "ESRI Shapefile" output2.shp -lco ENCODING=UTF-8 -where "PAC > 100000 and PAC <> 250100" output1.shp
但这样生成的城市边界仅包括陆地边界,对于内陆型城市,在使用中问题不大,但对于沿海城市,则很多人类活动轨迹可能会超出陆地边界(比如舟山),因此还需要一个融合近海边界的城市边界。手头上有一个2012年版本的含海洋边界的城市边界数据,需要将其海洋边界数据融合到新的全国边界数据集中。
处理过程为:对含有海洋边界的数据集 bou2012,和最新全国城市边界数据集 boua_city,执行 difference 操作,在 QGIS3 进行编辑,删除内陆边界中有差异的部分,在沿海边界删除海洋中的小岛(内多边形),同时添加一个虚拟字段 pac_city(和 boua_city 中的字段相同),最终生成海洋城市边界数据集。将 boua_city 数据集和上一步中生成的海洋城市边界数据集执行 union 操作。对 union 后的数据集,根据 pac_city 字段执行 dissolve 操作。人工检查最终生成的数据集。