R交互式地图开发

使用R交互式地图开发获得上面这幅表达2019年12月20日上午10时40分我国大部分城市的空气质量情况,难度降低到了超乎你的想象,当然首先超乎了我的想象。

我在2017年学习R的时候,用地图绘制相关人口风力发电等数据,记得还使用到了svg矢量图的编辑,illustrator的后期美颜。可这一周,我在学习将R与高得地图结合进行GPS数据可视化的过程中,获得了一个Big surprise,短短几行代码,甚至连高得地图的api key都不需要。赶紧记录下来。

点击下面的链接,就是直出效果。

https://www.gejou.com/wp-content/uploads/2019/12/index.html


锅碗:

  1. leafLet,leafletCN这两个R package。(真是美妙的封装包)
  2. XML,另一个要用到的R package。

原材料:

  1. www.pm25.in/rank。(感谢 BestApp工作室 )

制作方法:

//准备锅碗
library(leafletCN)
library(XML)
//准备原材料
//利用XML包中的readHTMLTable函数从pm25.in网站获取表格数据,这里要注意参数,
//encoding指定编码格式为UTF-8
//header指定去除原表头,这个很重要,否则会报错,应该是网页表头的编码格式存在问题
//stringsAsFactors指定读取的表格数据后的字符串不转换为因子型变量
//t是一个dataframe
t <- readHTMLTable("http://www.pm25.in/rank",encoding="UTF-8",header=F,stringsAsFactors=F)[[1]]
//截取t的第二、三列数据,分别代表城市名,AQI的观测值
dat <- t[,2:3]
//给dat的各列赋值列名
names(dat) <- c("city","AQI")
//将dat中的AQI的观测值转换为数值
//至此,dat已经是我们处理好的可以应用于可视化的二次数据了
dat$AQI <- as.numeric(dat$AQI)
//准备调色
//利用colorRampPalette函数生成从绿色-土黄色-橙色-红色-深红色的渐变色色板
//这个色板需要根据你想表达的内容进行调试,空气质量用这种表达还不错
col <- colorRampPalette(c("green","#edbd65","orange","red","darkred"))(length(dat$city))
//出锅
//利用leafletCN包中的geojsonMap函数绘制地图,注意参数
//dat指定了经过加工的数据原材料
//"city"是leafletCN中已经预设的城市地图基础信息
//popup指定交互式点击地图时的弹出信息
//palette就是上一步生成的色板
//legendTitle指定地图右下角的图标标题
geojsonMap(dat,"city",popup=paste(dat$city,":",dat$AQI),palette=col,legendTitle="AQI")

8行代码搞定,这里leafletCN包帮我们搞定了很多事,内置amap()函数输出的高德地图的底图,然后封装了city这样的中国城市名与地图地理位置的对应关系,让我们只要输入城市名就能获得地图上对应的块。我们唯一需要用心的就是在色板的选择上需要根据主题来精心调试,让读者一目了然。



一条关于 "R交互式地图开发" 的评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注