sp | sp格式的空间矢量对象及其函数方法简介

在前面的推文中,小编曾多次提到R语言的空间矢量数据有sp和sf两种类型。因为sf对象有诸多优点,所以前面对其做了重点介绍。本篇,我们来简单地介绍下sp对象。

创建sp对象

下图展示了sp格式的各类对象名称及其特征:

  • 以点对象(points)为例,SpatialPoints表示只包含坐标信息、没有属性信息的点对象,SpatialPointsDataFrame表示既包含坐标信息、也包含属性信息的点对象。

sp对象的创建函数和它的类型名称相同(上图)。如创建不带属性数据的点对象的函数为SpatialPoints(),创建带属性数据的点对象的函数为SpatialPointsDataFrame()。下面依次举例说明。

点对象

SpatialPoints()函数的语法结构如下:

SpatialPoints(coords, proj4string = CRS(as.character(NA)),
              bbox = NULL)
  • coords:点的坐标,数据结构为矩阵或数据框;

  • proj4string:对应的投影坐标系;

  • bbox:坐标各维度的范围,可忽略。

SpatialPointsDataFrame()函数的语法结构如下:

SpatialPointsDataFrame(coords, data, coords.nrs = numeric(0), 
                       proj4string = CRS(as.character(NA)),
                       match.ID, bbox = NULL)
  • data:存储属性数据的数据框。

示例数据为sp工具包中的meuse数据集:

library(sp)
data("meuse")

为了创建仅包含坐标信息的点对象,可以仅保留该数据集中的xy变量作为输入对象:

xy <- subset(meuse, select = c(x, y))
sp.pts <- SpatialPoints(xy)

使用SpatialPointsDataFrame()函数需要将坐标信息和属性信息分别保存在一个数据框中:

xy <- subset(meuse, select = c(x, y))
df <- subset(meuse, select = -c(x, y))
sp.dfpts <- SpatialPointsDataFrame(xy, df)

# coords参数也可以使用无属性的点对象
sp.dfpts <- SpatialPointsDataFrame(sp.pts, df)

创建包含属性信息的对象,还有一种更便捷的方法。如下例:

# 方法1
sp.dfpts2 <- meuse
coordinates(sp.dfpts2) <- ~ x + y

# 方法2
sp.dfpts3 <- meuse
coordinates(sp.dfpts3) <- c("x", "y")

网格对象

创建网格对象前需要先创建一个网格的拓扑结构,使用函数为GridTopology()。语法结构如下:

GridTopology(cellcentre.offset,
             cellsize, cells.dim)
  • cellcentre.offset:网格中心在各维度的坐标起点;

  • cellsize:网格在各维度的单位大小;

  • cells.dim:各维度的网格个数。

示例:

gt <- GridTopology(c(0,0), c(0.5,1), c(10,5))

很容易理解,创建只包含坐标信息的网格对象的函数为SpatialGrid()

SpatialGrid(grid, proj4string = CRS(as.character(NA)))
sp.grid <-SpatialGrid(gt)
plot(sp.grid)

创建包含属性信息的网格对象的函数为SpatialGridDataFrame():

df <- data.frame(attr = 1:50)
sp.dfgrid <- SpatialGridDataFrame(gt, df)

同点对象一样,网格对象也可以通过coordinates(sp) <- ~ x + y的方式创建。需要使用base工具包中的expand.grid()函数:

expand.grid(..., KEEP.OUT.ATTRS = TRUE,
            stringsAsFactors = TRUE)
  • ...:各维度的坐标值。

示例如下:

gt2 <- expand.grid(x = seq(0, 4.5, 0.5),
                   y = seq(0, 4, 1))
df2 <- data.frame(attr = 50)
sp.dfgrid2 <- data.frame(gt2, df2)
coordinates(sp.dfgrid2) <- ~ x + y

线、面对象

创建线、面对象的方法基本和点、网格对象类似,但远不如后者常用,在这里就不再进行介绍了,有需要的读者可以访问下方链接查看官方说明文档:

https://mirrors.tuna.tsinghua.edu.cn/CRAN/web/packages/sp/vignettes/intro_sp.pdf

函数方法

sp对象的数据结构如下图:

  • data:属性信息;

  • coords:坐标信息;

  • bbox:坐标范围;

  • proj4string:投影信息。

使用@符号可以提取sp对象的上述信息,如:

sp.dfpts@data

基本函数

下面列举了一些常用函数,这些函数的功能及名称基本与sf工具包的函数类似:

  • []:提取属性数据中的列或行;

  • [[]]:提取属性数据中的列,即变量;

  • dimensions:查询维度;

  • bbox:查询各维度的坐标范围;

  • coordinates:提取坐标信息;

  • geometry:提取几何信息;

  • spplot:绘制地图,即可视化。

rgeos工具包

对sp对象进行处理的更多函数可见rgeos工具包。下图中的红色框内的函数,其名称以g开头,功能基本与sf工具包中的st_*系列函数类似:

说明

sp对象是R语言最初采用的数据结构形式,但近年来逐渐被sf对象所替代,而R中的许多空间处理方法对两者格式同样适用,因此小编建议以掌握sf对象的处理方法为主,sp对象的处理方法了解即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值