空间数据操作

空间数据操作

上次的课程中我们讲解了属性数据的操作,也就是数据集中非空间数据的操作,也就是各种数据框的操作。本次课程中我们将学习空间数据的操作。大体也是分两种:矢量数据的地理计算和栅格数据的地理计算。

需要注意的是在进行涉及多种地理数据的计算中,各个地理数据的 crs 应该保持一致。

准备

加载相关的 R 包:

1
2
3
4
5
library(tidyverse)
library(sf)
library(raster)
library(dplyr)
library(spData)

矢量数据地理计算

子集

例如我们从新西兰边界数据和新西兰境内最高的 101 个高地的数据中提取 Canterbury 地区的边界数据和该区域内的高地数据:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

绘图展示下:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

可以看到 cycle_hire_osm 数据集中有 capacity 变量,而 cycle_hire 数据集中没有,如果我们想获取 cycle_hire 的 capacity 数据,我们就需要进行非重叠空间连接计算了,例如我们设定 dist = 20,单位是 m,如果两个数据集中的两个点的距离小于这一阈值,我们便认为其中属于 cycle_hire 数据集中的点的 capacity 值等于 cycle_hire_osm 数据集中的对应点,具体操作如下。

首先我们看一下 cycle_hire 中的点位于阈值范围内的点有多少个:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

也就是说 cycle_hire 数据集中有 438 个点和 cycle_hire_osm 数据集中对应的点距离小于 20 m,那么连接如何操作呢:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

可以注意到 z 的点数大于 cycle_hire,这是因为 cycle_hire_osm 数据集中的一个点周围 20m 范围内可能有多个 cycle_hire 数据集中的点,由此产生了重复,对于这些重复的点,他们的 capacity 值可以取平均:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

再绘图比较下:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

空间数据的分组聚合

回到上面新西兰的例子,加入我们想计算新西兰各个区域的高地的平均海拔:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

另外我们还可以这样:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

实践中我们经常会遇到下面这样的事情:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

假如我们想聚合计算图中展示的两个大块区域的 value 值。不过由于这个区域的轮廓和其小块区域的轮廓并不重合,直接进行连接就不太容易了。

针对这种问题最简单的有用方法是面积加权空间插值,代码如下:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

距离关系

使用 st_distance() 函数可以计算两个对象的距离。例如计算新西兰最高点到坎特伯雷地区地理质心之间的距离:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

注意这个单位是 m,如果我们想把结果转换成 km 可以这样:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

回想上面的这个案例:

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

我们计算下这些点到这个三角形区域的距离:

1
st_distance(p, a)

可以看到,点 1 和 点 2 与三角形区域相接触,所以距离是 0,点 3 到三角形的最小距离是 √2/2,也就是 0.7071068。因此 st_distance 函数计算的距离是两个地理对象的最小距离。

最后我们再通过一个案例感受下地理计算的魅力:R 语言地理距离计算:中国各市的邻接权重矩阵、距离权重矩阵和反距离权重矩阵

案例:R 语言地理距离计算:中国各市的邻接权重矩阵、距离权重矩阵和反距离权重矩阵

相关材料见附件中。

知识星球附件链接:https://t.zsxq.com/yz7qRRj

#

评论

Your browser is out-of-date!

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

×