【转载】ggmapcn | 一款绘制中国标准地图的R包

文摘   2024-11-09 22:15   安徽  

写在前面

众所周知,标准地图仅有JPG、EPS两种数据格式,即便使用Arcgis等专业软件,也难以完美复刻自然资源部提供的参考地图。因为官方并未公开地图的矢量数据和投影参数。为了开发出一款使用R语言复刻标准地图的R包,本人阅读了各种公开的资料,筛选和比较网上的各种数据源和投影参数,终于在ggplot2的框架下开发了一款名为ggmapcn的R包。该包提供了一种生产标准中国地图的方法,或许仍存在一些不足之处,本人会根据大家的批评与意见持续迭代更新该R包。

本文为学习交流使用,不用于商业目的,内容仅供参考

01

标准地图的相关介绍

1.1

国家标准地图服务系统

国家标准地图服务系统于2016年10月上线,由自然资源部地图技术审查中心承办。

访问地址为:http://bzdt.ch.mnr.gov.cn/

图1. 国家标准地图服务系统首页

标准地图是我们进行新闻宣传、书刊报纸插图、广告展示背景图等制图的权威参考,也是编制公开版地图的参考底图。社会公众可以免费浏览、下载标准地图,直接使用标准地图时需要标注审图号。

然而,标准地图仅有JPG、EPS两种数据格式。如果我们想对标准地图进行直接编辑,通常只能使用Adobe Illustrator等软件编辑EPS格式地图。对地图内容编辑(包括放大、缩小和裁切)改动的,公开使用前还需要送自然资源主管部门审核

在科学研究中,我们有时需要展示较大范围的研究区,往往需要制作国界、边界等符合规范的中国地图。在这种情况下,基于矢量文件进行地图制作几乎是必经之路,但官方并未提供相应数据服务,需要我们自制地图并送自然资源主管部门审核,在出版前标注地图的审图号。

1.2

常用地图的比例尺及投影

在国家标准地图服务系统中,我们可以下载到地图比例尺为1:740万、1:1000万等。

图2. 不同比例尺的标准地图

通常,根据我国的地理分布以及各种投影的特点,我国使用地图投影的选择通常采用以下标准[1]: 

Lambert投影

等角割圆锥投影,没有角度变形,两条标准纬线上没有任何变形,由于采用了分带投影,每带纬差较小,因此我国范围内的变形几乎相等,最大长度变形不超过±0.03%,最大面积变形不大于±0.06%。我国的基本比例尺地形图中1:100万地形图、大部分省区图以及大多数这一比例尺或者更小比例尺的地图多采用Lambert投影。

高斯克吕格投影

即等角横轴切椭圆柱投影,将中央经线投影为直线,其长度没有变形,与球面实际长度相等,其余经线为向极点收敛的弧线,距中央经线愈远,变形愈大。我国的基本比例尺地形图中1:50万、1:25万、1:10万、1:5万、1:2.5万、1:1万、1:5000通常采用采用高斯克吕格投影。

Albers投影

Albers投影,即双标准纬线等积割圆锥投影,没有面积变形、两条标准纬线上不变形,在图上保持正确的面积对比,适用于遥感监测中的种植面积动态监测。Albers投影和Lambert投影属于同一投影系统的(均为正轴割圆锥投影),该投影在中国,中央经线一般取105°E,两条标准纬线为25°N和47°N

1.3

标准地图的投影选取

在参考标准地图进行制图时,大多数人选择使用前面所述的Albers投影,中央经纬为105°或者110°。然而无论怎么选择参数,制作出的地图总是不能与标准地图的参考图完美贴合。

在《标准地图,想说爱你不容易__关于标准地图投影方式的判定》一文中[2],博主认为标准地图使用的原始底图较早,在Albers投影上还可能存在一定变形。

2024年的推文《带审图号标准地图制作,如何设置中国地图的标准投影?》提到,有博主在询问过相关人士后了解到标准地图采用的是Azimuthal Equidistant投影。虽然没有官方资料证明该投影的权威性,但笔者试过后觉得效果挺好。在Arcgis中,该投影的参数设置如下:

图3. Azimuthal Equidistant投影

02

ggmapcn包的简介与使用教程

2.1

2024版标准矢量地图的获取

绘制标准地图最重要的是边界不能出错,这就需要我们拿到最准确的矢量文件。目前,天地图已经共享了中国省、市、县的边界文件,该数据来自国家基础地理信息中心。

其访问地址为:

https://cloudcenter.tianditu.gov.cn/dataSource

图4. 天地图服务中心

在下载页面中,我们可以看到在线地图的审图号为GS(2024)0650号。我们有理由相信这个底图数据是权威且符合规范的。

图5. 天地图行政区划可视化

2.2

ggmapcn的开发思路

虽然已经有一些开发者开发了绘制中国地图的R包,但这些包的出图样式并不是特别接近标准地图,并且其数据源可能来自早期的民政部网站/阿里巴巴/或者网络流传的2019版、2020版审图号文件,其权威性和时效性可能不算理想。此外,我希望开发一个R包来更好地实现下面的功能:

  1. 使用R绘制出的地图可以与标准地图的EPS文件有很好的贴合度;

  2. 地图的样式接近标准地图,国界线外有缓冲线、海岸线可以单独着色为蓝色。

  3. R包本身的使用不需要太多代码,适合R语言的新手,但可以与ggplot很好地交互。

因此,我从这些角度出发设计了名为ggmapcn的R包。

2.3

ggmapcn的安装

本人已将该包传到github上,访问网站为:

https://github.com/Rimagination/ggmapcn

在R中,我们使用如下代码进行安装:

# install.packages("devtools")devtools::install_github("Rimagination/ggmapcn")

接着,我们加载该包,同时加载ggplot2包。

library(ggplot2)library(ggmapcn)

2.4

ggmapcn的使用

(1)geom_mapcn()函数的使用

仅需使用geom_mapcn()即可调用绘制具有省份边界的中国地图。该地图默认使用 Azimuthal Equidistant投影。

ggplot() +    geom_mapcn() +    theme_minimal() #简洁的网格主题

仅需使用geom_mapcn()即可调用绘制具有省份边界的中国地图。该地图默认使用 Azimuthal Equidistant投影。

ggplot() +    geom_mapcn() +    theme_minimal() #简洁的网格主题

如果您想尝试 Albers 投影,可以更改crs参数对其进行自定义。我们还可以调节其他美学参数。

ggplot() +    geom_mapcn(crs = "+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs",                color = "black",                fill = "white",                size = 0.7) +    theme_minimal()

(2)geom_mapcn()函数的使用

geom_boundary_cn()用于将大陆边界和海岸线添加到 地图。您可以分别设置大陆边界和海岸线的颜色和粗细:

ggplot() +    geom_mapcn(fill = NA) +    geom_boundary_cn(        mainland_color = "black",        mainland_size = 0.5,        coastline_color = "skyblue",        coastline_size = 0.5    ) +    theme_minimal()

(3)geom_buffer_cn()函数的使用

geom_buffer_cn()用于指定国界的缓冲距离和颜色等。以下示例显示了在一个地图上组合不同距离的缓冲区的方法:

ggplot() +    geom_buffer_cn(mainland_dist = 50000) +    geom_buffer_cn(mainland_dist = 20000, fill = "#BBB3D8") +    theme_minimal()


(4)绘制中国地图的完整示例

以下是一个全面的示例,演示了如何绘制一张标准地图:

ggplot() +    geom_buffer_cn(mainland_dist = 40000) +    geom_buffer_cn(mainland_dist = 20000, fill = "#BBB3D8") +    geom_mapcn(fill = "white") +     geom_boundary_cn() +    theme_minimal()

图片导出

点击Rstudio右下角的Plots-Save as PDF:

图片尺寸选择 25 × 25 inches,然后点击save:

为了对比图片的贴合度,这里我下载了2022年的中国地图 1:1000万 对开无邻国版的标准地图EPS文件,将其在Adobe Illustrator中打开。

将导出后的图片拉到打开的文件中,调整不透明度,并拖动图片对齐两个图层的地图,效果如下:

gif动图

近乎完美重合了,实际上更精细地微调一下图片大小会更贴合,但 25 × 25 inches这个出图尺寸比较好记,几乎直出就是可以送审的图。

我也试着和另一张彩色的标准地图重叠,效果类似:

gif动图

最后,这是笔者第一次公开发布一个R包,里面有的细节或许还能优化,某些功能或许考虑得不是很全面,欢迎大家批评指导,谢谢!

参考资料

[1] Arcgis使用教程(二)ARCGIS常用数据格式及地图投影_arcgis投影介绍-CSDN博客

[2] 标准地图,想说爱你不容易__关于标准地图投影方式的判定。微信公众号-小雷鸟的窝

[3] 带审图号标准地图制作,如何设置中国地图的标准投影?微信公众号-城市感知计算

点击“在看”,让大数据记住你的喜好

GISer last
GISer last 公众号 主要以分享互联网数据资源为主。也分享过GIS、FME等技术教程方法。我个人对于大数据资源、可视化制作、地图制图等方面有很大兴趣,也会分享个人的一些应用和教程。
 最新文章