找回密码
 立即注册
查看: 6447|回复: 4

空间数据分析专题|空间数据处理及可视化—R的空间数据类

[复制链接]
发表于 2015-2-13 16:57:10 | 显示全部楼层 |阅读模式
本帖最后由 R语言微信号 于 2015-2-13 17:02 编辑


2015-02-13xxiao513

微信扫一扫
关注该公众号



朋友圈分享 并回复:0213
即可获取本节程序和R数据文件
背景及概念
地理信息系统(GIS)是“检索、操作、分析与地球相关的空间数据的系统”,空间统计学是GIS的重要研究方向之一,是针对具有空间分布特征数据进行分析的一套统计分析理论和方法。R和GIS之间的关系非常密切,在过去10多年里R拥有了越来越多的用于处理和分析空间数据的包,就连著名的R任务视图CRAN Task View都有专门的空间数据分析分类,详见http://cran.r-project.org/web/views/Spatial.html。空间统计核心包按照其功能进行分类如下:

R能支持空间数据从导入、转换、处理、分析、可视化和导出的整个分析流程,这使得R非常适合用于空间数据分析。本期内容介绍R中的空间数据类型及其基本的可视化。
首先介绍主要的空间类
spatial类是基类,定义了所有子类都必须要有的两个方法,第一个是范围约束,第二个定义了坐标参考系(CSR类)。使用getClass方法获取详细定义和子类。
library(sp)
getClass(“Spatial”)
可以看到空间类的子类包括点、线、面、网格数据等。

1. SpatialPoints类
点是最基础的空间数据类,由一系列的坐标点表示,以一个只有经纬度两列的数据为例,我们构造一个spatialpoint对象并可视化:
> #查看数据:
head(crime)
  ID      LONG      LAT
1  1 -76.65159 39.23941
2  2 -76.47434 39.35274
3  3 -76.51726 39.25874
4  4 -76.52607 39.40707
5  5 -76.51001 39.33571
6  6 -76.70375 39.26605
> #创建由坐标点构成的矩阵:
data<- crime
sp_point <- cbind(data$LONG,data$LAT)
colnames(sp_point) <-c("LONG","LAT")
head(sp_point)
          LONG      LAT
[1,] -76.65159 39.23941
[2,] -76.47434 39.35274
[3,] -76.51726 39.25874
[4,] -76.52607 39.40707
[5,] -76.51001 39.33571
[6,] -76.70375 39.26605

> #定义坐标系,并创建spatialpoints对象
proj<- CRS("+proj=utm +zone=17 +datum=WGS84") data.sp <- SpatialPointsDataFrame(coords=sp_point,data,proj4string=proj)
>#查看区域的边界框范围:

bbox(data.sp)
min       max
LONG -76.82981 -76.38756
LAT   39.22488  39.67995
>#绘图:
par(mar=c(2,2,0.2,0.2))


plot(data.sp,pch=16, cex=.5, axes=T)

2. SpatialLines类
线由一系列的点按顺序连接构成,多条线构成list形成SpatialLines对象,以中国地图边界数据为例,我们构造一个SpatialLines对象,并绘图:
>#加载maps包,并从中提取出中国地图
library(maps)

china<- map("world", "china", plot = FALSE)
>#将china的map对象转换为SpatialLines对象
p4s <- CRS("+proj=longlat +ellps=WGS84")

SLchina <- map2SpatialLines(china, proj4string = p4s)
>#查看这个SpatialLines对象的属性
str(SLchina, max.level = 2)

Formal class 'SpatialLines' [package "sp"] with 3 slots  
..@ lines      ist of 80  
..@ bbox       : num [1:2, 1:2] 73.7 18.3 134.7 53.5  
.. ..- attr(*, "dimnames")=List of 2  
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
可以看到SpatialLines对象由一个lines list、一个边界框、一个坐标系定义组成,使用plot函数绘图:
plot(SLchina)
3. SpatialPolygons类。
多边形数据与线数据类似,区别在于由点连成的线是封闭的,即线的首尾点是相同的。我们以2004年美国大选数据为例,构造一个含有属性信息的SpatialPolygons对象,并可视化。这个新对象称之为SpatialPolygonsDataFrame,因为除了空间坐标外,这个对象还以数据框的形式储存了每个多边形的属性,如州名、得票率等。
>#属性数据在绘制时可以利用到,比如将支持Bush的州绘制为红色,将支持Kerry的州绘制为蓝色
cols<- ifelse(election$Bush > election$Kerry,"brown1","cadetblue")

plot(election,col=cols)
4. SpatialGrid和SpatialPixel类。
栅格数据是一种非常规则的数据结构,以网格的形式存放数据,定义好了GridTopology对象(包括左下角单元格中心坐标,单元格大小,和行列数)网格就固定了。例如常见的图像数据,其中每一个像素就是一个网格,像素中存放的数据就是网格的属性。SpatialPixel与SpatialGrid的区别在于,在网格缺失数据多的时候,SpatialPixel可以以只记录非缺失网格属性、坐标和索引的形式存储对象,节约空间。下面我们以R自带的数据集volcano为例,构造一个含有属性的SpatialGrid对象即一个SpatialGridDataFrame,并绘图。
data(volcano)

x <- rep(1:nrow(volcano), each=ncol(volcano))
y <- rep(1:ncol(volcano), times = nrow(volcano))
z <- as.vector(t(volcano))
df<- data.frame(z=z, x=x, y=y)
#转换为SpatialPointsDataFrame
coordinates(df) = c("x", "y")
#转换为SpatialPixelsDataFrame
gridded(df) <- TRUE
#转换为SpatialGridDataFrame
df = as(df, "SpatialGridDataFrame")
#二维可视化
image(df,col=terrain.colors(100), axes=F)
contour(df,levels=seq(from=min(df$z), to=max(df$z), by=10),axes=F, add=T)
下期预告:
下一期,将为大家介绍空间数据的坐标参考系以及导入导出,有了自定义的数据来源,就能更灵活的操作数据和做出自己想要的结果。

关注我们
—官方网站—
R语言中文网  www.r-china.net
—官方QQ群—
R语言中文论坛-2(1000人群):427060123
R语言中文论坛(2000人群,已满):74076289
Biostatistician(500):186701945
—官方微博—
新浪微博:@R语言中文网官网
—官方微信—
微信名:R语言中文网  微信号:rchinanet



微信扫一扫
关注该公众号






回复

使用道具 举报

发表于 2015-2-14 16:06:06 | 显示全部楼层
谢谢分享,一起学习,呵呵
回复

使用道具 举报

发表于 2015-2-24 12:44:57 | 显示全部楼层
学习中,非常棒的分享{:soso_e179:}
回复

使用道具 举报

发表于 2015-2-26 14:22:07 | 显示全部楼层
这个非常好用,用ARCGIS这种地理信息系统软件可以做,在批量处理的效率方面,还是跟R有一些差距。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 18:40 , Processed in 0.028417 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表