众所周知,标准地图仅有JPG、EPS两种数据格式,即便使用Arcgis等专业软件,也难以完美复刻自然资源部提供的参考地图。因为官方并未公开地图的矢量数据和投影参数。为了开发出一款使用R语言复刻标准地图的R包,本人阅读了各种公开的资料,筛选和比较网上的各种数据源和投影参数,终于在ggplot2的框架下开发了一款名为ggmapcn的R包。该包提供了一种生产标准中国地图的方法,或许仍存在一些不足之处,本人会根据大家的批评与意见持续迭代更新该R包。
国家标准地图服务系统于2016年10月上线,由自然资源部地图技术审查中心承办。
访问地址为:http://bzdt.ch.mnr.gov.cn/
标准地图是我们进行新闻宣传、书刊报纸插图、广告展示背景图等制图的权威参考,也是编制公开版地图的参考底图。社会公众可以免费浏览、下载标准地图,直接使用标准地图时需要标注审图号。
然而,标准地图仅有JPG、EPS两种数据格式。如果我们想对标准地图进行直接编辑,通常只能使用Adobe Illustrator等软件编辑EPS格式地图。对地图内容编辑(包括放大、缩小和裁切)改动的,
公开使用前还需要送自然资源主管部门审核
。
在科学研究中,我们有时需要展示较大范围的研究区,往往需要制作国界、边界等符合规范的中国地图。在这种情况下,基于矢量文件进行地图制作几乎是必经之路,但官方并未提供相应数据服务,需要我们自制地图并送自然资源主管部门审核,在出版前标注地图的审图号。
在国家标准地图服务系统中,我们可以下载到地图比例尺为1:740万、1:1000万等。
通常,根据我国的地理分布以及各种投影的特点,我国使用地图投影的选择通常采用以下标准
[1]
:
等角割圆锥投影,没有角度变形,两条标准纬线上没有任何变形,由于采用了分带投影,每带纬差较小,因此我国范围内的变形几乎相等,最大长度变形不超过±0.03%,最大面积变形不大于±0.06%。我国的基本比例尺地形图中1:100万地形图、大部分省区图以及大多数这一比例尺或者更小比例尺的地图多采用Lambert投影。
即等角横轴切椭圆柱投影,将中央经线投影为直线,其长度没有变形,与球面实际长度相等,其余经线为向极点收敛的弧线,距中央经线愈远,变形愈大。我国的基本比例尺地形图中1:50万、1:25万、1:10万、1:5万、1:2.5万、1:1万、1:5000通常采用采用高斯克吕格投影。
Albers投影,即双标准纬线等积割圆锥投影,没有面积变形、两条标准纬线上不变形,在图上保持正确的面积对比,适用于遥感监测中的种植面积动态监测。Albers投影和Lambert投影属于同一投影系统的(均为正轴割圆锥投影),该投影在中国,
中央经线一般取105°E,两条标准纬线为25°N和47°N
。
在参考标准地图进行制图时,大多数人选择使用前面所述的Albers投影,中央经纬为105°或者110°。然而无论怎么选择参数,制作出的地图总是不能与标准地图的参考图完美贴合。
在《标准地图,想说爱你不容易__关于标准地图投影方式的判定》一文中
[2]
,博主认为标准地图使用的原始底图较早,在Albers投影上还可能存在一定变形。
2024年的推文《带审图号标准地图制作,如何设置中国地图的标准投影?》提到,有博主在询问过相关人士后了解到标准地图采用的是Azimuthal Equidistant投影。
虽然没有官方资料证明该投影的权威性,但笔者试过后觉得效果挺好。
在Arcgis中,该投影的参数设置如下:
图3. Azimuthal Equidistant投影
绘制标准地图最重要的是边界不能出错,这就需要我们拿到最准确的矢量文件。目前,天地图已经共享了中国省、市、县的边界文件,该数据来自国家基础地理信息中心。
其访问地址为:
https://cloudcenter.tianditu.gov.cn/dataSource
在下载页面中,我们可以看到在线地图的审图号为GS(2024)0650号。我们有理由相信这个底图数据是权威且符合规范的。
虽然已经有一些开发者开发了绘制中国地图的R包,但这些包的出图样式并不是特别接近标准地图,并且其数据源可能来自早期的民政部网站/阿里巴巴/或者网络流传的2019版、2020版审图号文件,其权威性和时效性可能不算理想。此外,我希望开发一个R包来更好地实现下面的功能:
-
使用R绘制出的地图可以与标准地图的EPS文件有很好的贴合度;
-
地图的样式接近标准地图,国界线外有缓冲线、海岸线可以单独着色为蓝色。
-
R包本身的使用不需要太多代码,适合R语言的新手,但可以与ggplot很好地交互。
因此,我从这些角度出发设计了名为ggmapcn的R包。
本人已将该包传到github上,访问网站为:
https://github.com/Rimagination/ggmapcn
在R中,我们使用如下代码进行安装:
# install.packages("devtools")
devtools::install_github("Rimagination/ggmapcn")
library(ggplot2)
library(ggmapcn)
仅需使用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()
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()