前言
我们在进行数据可视化,或者发表文章时候,如果碰绘制中国地图问题,请记住,一定要使用中国标准地图。
但是,平时网上的案例,或者下载的地图,都是缺失台湾或者西藏交界有缺失,这都是丢失国家领土主权的。
中国标准地图的绘制尤为重要,涉及到国家的领土主权。标准的中国地图如图所示;这里的地图来源于中国民政部官网 。请大家在进行案例操作或者可视化展示时候,一定要切记国家的领土主权的完整。使用标准的中国地图。
另外还要一个问题,网络上中国地图资源很多,但是要么收费,要么不标准,这也是今天介绍此次博客的原因,给大家提供一个标准化的连接,即以后的绘图,都是标准的中国地图。避免引起国家的领土主权的问题。
今天就给大家介绍如果下载标准的中国地图数据,包括Shp文件Json文件。
数据源1-中国民政部官网
中国民政部官网【http://xzqh.mca.gov.cn/map】提供了省级
与县级
两种类型的地图,其审图号为:GS(2022)1873. 已经更新到2022年。
下面是R的获取代码:
library(geojsonsf) ## 加载包
library(sf)
library(tidyverse)
######################################
# source1 民政部
# link: http://xzqh.mca.gov.cn/map
######################################
## 1.全国省级
China = st_read(dsn = "http://xzqh.mca.gov.cn/data/quanguo.json",
stringsAsFactors=FALSE)
st_crs(China) = 4326
# plot
ggplot(China)+
geom_sf()+
labs(title="Ministry of Civil of PRC",x="Lon",y="Lat")
China
Simple feature collection with 156 features and 4 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: 73.67795 ymin: 3.984257 xmax: 135.2075 ymax: 53.64847
Geodetic CRS: WGS 84
First 10 features:
id NAME QUHUADAIMA FillColor
1 710000 daodian
2 440000 daodian
3 710000 daodian
4 710000 daodian
注意:我们用的连接是
http://xzqh.mca.gov.cn/data/
+quanguo.json
全国县级地图
这里我们只需要更改http://xzqh.mca.gov.cn/data/
+ quanguo.json
## 1.全国
Chinaxian = st_read(dsn = "http://xzqh.mca.gov.cn/data/xian_quanguo.json",
stringsAsFactors=FALSE)
# 转至CRS 4326
st_crs(Chinaxian) = 4326
# plot
ggplot(Chinaxian)+
geom_sf()+
labs(title="Ministry of Civil of PRC",x="Lon",y="Lat")
[图片上传失败...(image-e4d075-1655205520503)]
江苏省地图
当然也可以获取某个省市级别的地图,只需要在http://xzqh.mca.gov.cn/data/
+ 省市的地址编码.json
这里演示江苏省的地图,江苏省的地址编码为320000。
X = st_read(dsn = paste0(API_pre, "320000.json"),
stringsAsFactors=FALSE)
st_crs(X) = 4326
# plot
ggplot(X)+
geom_sf()+
labs(title="Jiangsu",x="Lon",y="Lat")
当然,这张地图只看到整块,看不到内部的市的构成需要对X数据进行处理,我们Print(X)可以看到里面的数据了。有FillColor
就是省内的市级地图。我们稍微处理一下。
把没有FillColor
的去除,然后再添加定值的FillColor
颜色。
## 只要江苏省内
X1=X %>% filter(!FillColor=="") %>%
filter(!NAME=="")
# plot
p2=ggplot(X1)+
geom_sf(fill=FillColor)+
labs(title="Jiangsu",x="Lon",y="Lat")
## 指定颜色
p3=ggplot()+
geom_sf(data = X1, aes(fill = NAME),lwd = 0) + #polygons filled based on the density value
scale_fill_manual(values = X1$FillColor)+
theme(text=element_text(size=10,family="STHeitiSC-Light"))+ # show 中文
labs(title="Jiangsu",x="Lon",y="Lat")
library(patchwork)
(p1+p2)
p3
数据源2-阿里云
这里比上述的数据源获取更简单,因为阿里云DATAV GeoAtlas的数据,直接给出连接,我们只需要点击数据,然后复制到R里面即可。
library(sf)
CHN = read_sf("https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json")
ggplot(CHN)+
geom_sf(fill=NA)+
labs(title="Aliyun DATAV GeoAtlas",x="Lon",y="Lat")
省级或市级数据
省级或市级数据也更简单,就只要点击你想要的地区,进去后复制 JSON API
,譬如江苏省 https://geo.datav.aliyun.com/areas_v3/bound/320000_full.json
,这里面不需要对获取是子数据进行提取。比较方便。
# 江苏
df_map1=read_sf("https://geo.datav.aliyun.com/areas_v3/bound/320000_full.json")
ggplot()+
geom_sf(data=df_map1,fill=NA)
数据保存
当然我们获取的是Json数据格式,也可转换成我们需要的Shpfile文件。 sf to Shp
当然可以转成其他格式,这里就不再介绍,可以自行Google 。
st_write(df_map1, "Jiangsu.shp")
总结
当然,这只是获取正确的中国地图,阿里云的数据源是比较方便的,但是阿里云的地铁数据没有审图号,我们还是用正规的民政部网站提供的数据吧。
另外地图文件获取后,只是基础,为我们的可视化提供便利。还需要进一步对地图进行数据的展示,未完待续。。。