前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R可视化 | 地理信息空间(上)

R可视化 | 地理信息空间(上)

作者头像
朱小五
发布2020-10-27 15:50:33
1.1K0
发布2020-10-27 15:50:33
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据

作者:张同学

来源:凹凸数据

第一版结果

1.1 地图的文件格式

shp数据结构:

1、分文件存储信息:

代码语言:javascript
复制
name.dbf name.shp name.shx

2、获取渠道

代码语言:javascript
复制
https://gadm.org/download_country_v3.html

3、导入工具

代码语言:javascript
复制
maptools rgdal
sf
json数据结构:

1、key-value形式的键值对结构

代码语言:javascript
复制
name.json

2、获取渠道

代码语言:javascript
复制
http://datav.aliyun.com/static/tools/atlas/

3、导入工具

代码语言:javascript
复制
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、从阿里地图下载省级地图,加载并实现地图可视化,在绘图前先做一些准备工作:

代码语言:javascript
复制
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:/空间可视化与地理基础")#指定读取文件的路径
  1. 某省级地图的地图实现
代码语言:javascript
复制
#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')
  1. 按市进行填充
代码语言:javascript
复制
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")

运行效果如下:

  1. 添加市级的标签
代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 地图的文件格式
    • shp数据结构:
      • json数据结构:
      • 1.2 数据文件的读取
      • 1.3 地理数据模型
      • 1.4 总结
      • 1.5 上手实战
        • 参考资料
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档