中国夜间灯光数据的处理和展示

中国夜间灯光数据的处理和展示

在之前的推文:ggplot2 案例:绘制大规模散点图 我展示了处理夜间灯光数据的一种方法,这种方法将 tiff 文件当作图片读入,然后再为每个像素点添加经纬度坐标。这种方法是可行的但是速度慢且不准确。事实上 tiff 文件可以通过 raster 包的 raster 函数读取为 raster 对象再进行处理,本文使用中国夜间灯光数据演示了这种处理方法的使用。

首先可以从知识下载我提供的附件,里面有一个 lightF182013.tiff 文件,就是中国夜间灯光数据了。使用下面的方式读取该数据:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

light 对象是个 raster 对象:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们可以通过下面的函数查看所有 raster 对象可用的函数:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们先用 plot() 函数作用一下:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

将 raster 对象转换成 sf 对象会更方便绘图,前面的教程中我们已经介绍了很多关于 ggplot2 + sf 绘图的教程:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

画中国地图就一定要带上九段线:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

安徽夜间灯光数据

首先我们需要一份安徽省的地图数据,然后根据安徽地图从中国夜间灯光地图上截取安徽的部分:

1
2
3
4
ah <- st_read('安徽省.json', stringsAsFactors = FALSE) %>% 
st_transform(projection(light))
ahlight <- mask(light, ah)
plot(ahlight)

把 ahlight 转换成 sf 对象处理:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

分组聚合 —— 计算安徽省每个市的平均夜间灯光亮度

使用 aggregate() 函数进行分组聚合即可:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

各个市的平均夜间灯光亮度值:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。
夜间灯光平均亮度 行政区划代码 城市名称
13.605723 340100 合肥市
14.274390 340200 芜湖市
10.032258 340300 蚌埠市
12.111821 340400 淮南市
15.977679 340500 马鞍山市
15.301887 340600 淮北市
12.658537 340700 铜陵市
7.637978 340800 安庆市
6.060311 341000 黄山市
9.328982 341100 滁州市
9.383161 341200 阜阳市
9.791738 341300 宿州市
7.397661 341500 六安市
8.640082 341600 亳州市
6.492240 341700 池州市
7.485030 341800 宣城市

再使用 ggplot2 绘图展示:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

可以看出安徽合肥附近的皖江城市群发展的明显更好。

为 leaflet 地图添加夜间灯光数据图层

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

更多 leaflet 的拓展图层可以从这里获得:http://leaflet-extras.github.io/leaflet-providers/preview/

我们再给中国添加国界线:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们也可以自己添加夜间灯光数据图层:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

安徽部分:

opacity = 0.8 用于设定透明度:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们再回顾一下之前提到的给 leaflet 地图添加标题的知识点:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

作业

今天有作业了!

  • 作业一:对附件中的 ndvi_201912.tiff(中国年度植被指数(NDVI)空间分布数据集) 数据进行探索性分析;
  • 作业二:将 ndvi_201912.tiff 数据绘制在 leaflet 图层上。
  • 附加题:计算中国每个城市的平均夜间灯光亮度数据。
#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×