R可视化 | 地理信息空间(上)
时间:2022-07-28
本文章向大家介绍R可视化 | 地理信息空间(上),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
作者:张同学
来源:凹凸数据
第一版结果
1.1 地图的文件格式
shp数据结构:
1、分文件存储信息:
name.dbf name.shp name.shx
2、获取渠道
https://gadm.org/download_country_v3.html
3、导入工具
maptools rgdal
sf
json数据结构:
1、key-value形式的键值对结构
name.json
2、获取渠道
http://datav.aliyun.com/static/tools/atlas/
3、导入工具
rgdal
sf
个人使用下来的感受是阿里云的json文件使用起来会更加方便一点。
1.2 数据文件的读取
- rgdal库的readOGR(dsn, layer,stringsAsFactors,encoding=NULL……)函数
- 读入数据转换为sp数据模型
- sf库的st_read(dsn, layer, stringsAsFactors)函数
- 读入数据转换为sf数据模型
- dsn:读入的文件名
- layer:读入的层数(如果是多层地图的话)
- stringsAsFactors:是否将读入文件中的字符串数据转换为因子数据
- encoding:文件的编码格式
1.3 地理数据模型
- SP(SpatialPolygonsDataFrame)格式
- 数据描述层(data.frame):名称、ID、编号、简写、IOS编码等
- 几何映射层(polygons):每一个行政区的多边形边界点(按order排序、按group分组)
- 需要使用fortify函数将polygons数据转换为数据框格式。
- SF(Simple feature list column)格式
- 获取的是完整的数据框( data.frame )格式
- 将每一个行政区对于的几何分界点封装成一个list对象
个人使用比较多的是SF格式的数据模型。
1.4 总结
文件格式与函数方法关系图
1.5 上手实战
设计目的:进行地理文件的加载、数据转换及基础处理,将地理信息数据与业务数据的融合(sp与sf数据模型),添加地理标签,应用地理坐标轴,最终完成一个地理空间可视化的小demo。
1、从阿里地图下载省级地图,加载并实现地图可视化,在绘图前先做一些准备工作:
library("ggplot2")
library("rgdal")
library("sf")
library("sp")
library("ggthemes")
library('dplyr')
library("data.table") #fread函数用于读取CVS表格
library("ggrepel")
rm(list = ls())
gc()
setwd("D:/空间可视化与地理基础")#指定读取文件的路径
- 某省级地图的地图实现
#rgdal包读入:
gansu_map <- readOGR("甘肃省.json",stringsAsFactors=FALSE)
Encoding(gansu_map@data$name) <- 'UTF-8'
frame_data = gansu_map@data
#frame_polygon = gansu_map@polygons
frame_polygon = fortify(gansu_map)
ggplot(frame_polygon,aes(long,lat,group = group)) +geom_polygon(colour = 'white')
- 按市进行填充
division_data1 <- gansu_map@data
division_data1 <- mutate(division_data1,id = row.names(division_data1))
division_data1 <- division_data1[,c("id","name")] #行政区划层
#division_data <- china_map1@data %>% mutate(id = row.names(.)) %>% .[,c("id","NAME")] #行政区划层
polygons_data1 <- fortify(gansu_map) #地理信息边界点数据
polygons_data1 <- polygons_data1[,c(1,2,7,3,6)]
#polygons_data <- fortify(china_map1) %>% .[,c(1,2,7,3,6)]
division_data1$id <- as.numeric(division_data1$id)
polygons_data1$id <- as.numeric(polygons_data1$id)
final_mapdata1 <- left_join(polygons_data1,division_data1,by= 'id')
ggplot(final_mapdata1,aes(long,lat,group = group)) +
geom_polygon(aes(fill=name),colour = 'white')+
coord_map("polyconic")
运行效果如下:
- 添加市级的标签
ggplot() +
geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=name),colour = 'white')+
geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
coord_map("polyconic")
还有优化版哦!
见明天续集
参考资料
[1]
张杰.《R语言数据可视化之美-专业图表绘制指南(增强版)》第11章 地理空间型图表: https://www.cnblogs.com/zzj420133722/p/13789195.html
- Angular学习-指令入门
- java:如何让程序按要求自行重启?
- linux:nohup 不生成 nohup.out的方法
- 让VIM支持Python2 by update-alternatives
- Angular中ngCookies模块介绍
- 如何让jboss eap 6.2+ 的多个war应用共享 jar 包?
- scala 学习笔记(07) 一等公民的函数
- 让BASH,VIM美美的Powerline
- 极品三数666.cn易主,价格让人大惊!
- ui-router中使用ocLazyLoad和resolve
- rpc框架之 avro 学习 2 - 高效的序列化
- rpc框架之HA/负载均衡构架设计
- 使用Docker-Docker for Web Developers(2)
- 打造高效前端工作环境-tmuxinator
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- docker save load export import的区别
- 使用ABAC控制数据访问
- linux 压力测试工具之ab
- 什么是Python Wheels?为什么要关心它?
- Nginx fastcgi_cache权威指南
- 玩转dockerfile
- redis实战第六篇 手动创建redis cluster
- docker容器入门最佳教程
- redis实战第五篇 jedis 连接 redis sentinel详解
- redis实战第四篇 手动容灾故障转移记录
- 10条很棒的Python一行代码
- 如何在一个Docker中同时运行多个程序进程?
- 如何在CentOS / RHEL 7上启用IPv6
- Golang中的RegExp正则表达式用法指南
- Golang glog使用详解