R_ggplot2地理信息可视化_史上最全(二)

本文是R_ggplot2地理信息可视化的第二部分,讲解地图数据集的读取与处理,包括GeoJSON、TopoJson、shp格式。介绍了地图数据的读取包和函数,如`rnaturalearth`、`maps`等,并探讨了如何与其他几何对象结合,如散点图、气泡图和条形图。同时,提到了数据简化的重要性以及`simplify`函数的应用。
摘要由CSDN通过智能技术生成

640?wx_fmt=png

作者:李誉辉  

四川大学在读研究生


前言

上文R_ggplot2地理信息可视化_史上最全(一)讲了sp和sf数据类型,这篇讲解地图数据集以及与其他几何对象的结合,还有栅格地图。

注:蓝字表示文末有其网址链接



4.地图数据集


地图数据集常见2中格式

  • json,包括GeoJSON(文件后缀为.geojson)和TopoJson(文件后缀为.json)。

  • shp, shp对象比较特殊,是由很多个文件组成的,
    通常在同一个文件下还有.shx和.dbf格式的文件。这些文件必须在一起,否则不能成功读取。

  • .rds,这是一种文件格式,分为sp.rdssf.rds两种,分别对应psf两种数据结构。
    使用
    sp::readRDS()读取。

640?wx_fmt=png

地图数据集读取包及函数

如上图所示,rgdalsf功能比较全,用得也比较多。
地图集下载网站:

  • GADM注意该网站中,中国地图不包含台湾。

  • 中国县级地图 (见文末)提取码:uomy

  • OpenStreetMap

  • 阿里云地图,左上角框框里面选择区域,左下角选择下载格式。

地图数据在线转换格式:

  • geojson.io,在线解析和转换格式。

  • mygeodata converter

  • IGIS Map Converter

推荐使用rmapshaper::ms_simplify()简化地图数据,可以指定简化比例,不然真的很卡,
该包使用拓扑学的知识简化多边形,简化后在常规分辨率下根本看不出来差别。
该函数支持
jsonspsf等多种输入对象。
object.size()可以查看数据集的存储大小。


4.1 json格式

4.1.1 rgdal包读取

 1rm(list = ls()); gc() # 清空内存
2library(ggplot2)
3
4path1 <- "E:/R_input_output/data_input/JSON/GeoJSON/China.geojson"
5China_1 <- rgdal::readOGR(dsn = path1, stringsAsFactors = FALSE)
6Encoding(China_1@data$name) <- "UTF-8" # 中文字符重编码
7China_2 <- fortify(China_1)
8
9ggplot(China_2) + 
10  geom_polygon(aes(x = long, y = lat, group = group, fill = group), 
11               color = "cyan", show.legend = FALSE) + 
12  coord_map()


1##           used (Mb) gc trigger (Mb) max used (Mb)
2## Ncells  901585 48.2    1744096 93.2  1744096 93.2
3## Vcells 1789510 13.7    9804475 74.9 12236244 93.4
4## OGR data source with driver: GeoJSON 
5## Source: "E:\R_input_output\data_input\JSON\GeoJSON\China.geojson", layer: "中国"
6## with 35 features
7## It has 10 fields


640?wx_fmt=png

4.2 sf包读取

sf包读取中文字符不会乱码。

 1rm(list = ls()); gc() # 清空内存
2library(ggplot2)
3library(sf)
4
5path1 <- "E:/R_input_output/data_input/JSON/GeoJSON/China.geojson"
6China_1 <- st_read(path1, stringsAsFactors=FALSE)
7
8ggplot(China_1) + 
9  geom_sf(color = "cyan", aes(fill = name), show.legend = FALSE) + 
10  coord_sf(crs = "+proj=aea +lat_1=25 +lat_2=50 +lon_0=105") + 
11  ggtitle("中国地图(Albers equal-area projection)")


 1##           used (Mb) gc trigger (Mb) max used (Mb)
2## Ncells 1112615 59.5    1744096 93.2  1744096 93.2
3## Vcells 2079841 15.9    9804475 74.9 12236244 93.4
4## Reading layer `涓浗' from data source `E:\R_input_output\data_input\JSON\GeoJSON\China.geojson' using driver `GeoJSON'
5## Simple feature collection with 35 features and 10 fields
6## geometry type:  MULTIPOLYGON
7## dimension:      XY
8## bbox:           xmin: 73.50235 ymin: 3.397162 xmax: 135.0957 ymax: 53.56327
9## epsg (SRID):    4326
10## proj4string:    +proj=longlat +datum=WGS84 +no_defs


640?wx_fmt=png


4.3 shp格式

4.3.1 rgdal包读取

 1rm(list = ls()); gc() # 清空内存
2library(ggplot2)
3
4path1 <- "E:/R_input_output/data_input/全国范围的行政边界和人口密度矢量图/CHN_adm/CHN_adm1.shp"
5China_1 <- rgdal::readOGR(dsn = path1, stringsAsFactors = FALSE)
6China_2 <- rmapshaper::ms_simplify(China_1) # 拓扑学知识简化数据
7object.size(China_1); object.size(China_2) # 简化到不足1/10大小
8
9China_3 <- fortify(China_2) # 转变为sp对象的数据框,然后就没有@了
10ggplot(China_3) + 
11  geom_polygon(aes(x = long, y = lat, group = group,fill = group), 
12               color = "cyan", size = 0.5, show.legend = FALSE) + 
13  coord_map()


1##           used (Mb) gc trigger (Mb) max used (Mb)
2## Ncells 1113970 59.5    1744096 93.2  1744096 93.2
3## Vcells 2050141 15.7    9804475 74.9 12236244 93.4
4## OGR data source with driver: ESRI Shapefile 
5## Source: "E:\R_input_output\data_input\全国范围的行政边界和人口密度矢量图\CHN_adm\CHN_adm1.shp", layer: "CHN_adm1"
6## with 32 features
7## It has 16 fields
8## 17647616 bytes
9## 1590376 bytes


640?wx_fmt=png


4.3.2 sf包读取

 1rm(list = ls()); gc() # 清空内存
2library(ggplot2)
3library(sf)
4
5path1 <- "E:/R_input_output/data_input/全国范围的行政边界和人口密度矢量图/CHN_adm/CHN_adm1.shp"
6China_1 <- st_read(path1, stringsAsFactors=FALSE)
7China_2 <- rmapshaper::ms_simplify(China_1) # 拓扑学知识简化数据
8
9ggplot(China_2) +
10  geom_sf(color = "cyan", aes(fill = NAME_1), show.legend = FALSE) + 
11  coord_sf(crs = "+proj=aea +lat_1=25 +lat_2=50 +lon_0=105") + 
12  ggtitle("中国大陆地图(Albers equal-area projection)")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值