R与GIS实践系列-Shapefile导入与地图显示
1. R项目简介
R是一个开源的统计计算和图形编程语言和软件环境,广泛应用于统计分析和数据挖掘[1]。R项目遵循GNU协议,它的软件环境源码由C,Fortran和R写就。R可以运行在多个平台,包括各种Unix,Linux发行版本,Window和MacOS上, 国内有中科院、厦门大学、北京交通大学等多个镜像[2]。R是对S语言的一种实现,由Ross Ihaka 和 Robert Gentleman 所创建,R取之他们名字的首字母。R具有由用户贡献的大量的类库,能够处理各种科学计算的问题。
2.R与GIS
与地学问题相关的R类库也十分繁多,包括Spatial data,Maptools,RGdal等。 不过似乎StackOverflow的主站关于R在GIS的问题比GIS分站更为活跃。原因未知……之所以要使用R是因为R能够以Hadoop集成[3],希望利用R更高效地处理空间聚类问题。虽然Mashout也是一个很好的解决方案,但是感觉用户更加需要脚本式的问题处理工具。R的GIS的书籍比较少,基本都是以文档的形式存在,其中Applied spatial data analysis with R是一本挺好的教材。多使用Example命令和Google也是学习R的一个好途径。
3.Shapefile导入与地图显示
R中导入Shapefile是非常容易的,可以使用的包,包括RGdal,maptools,PBSmapping等。在这里我们采用maptools和sp两个类库来实现地图数据的导入和显示。在R中心选择镜像并下载。
- 加载这两个类库,输入如下代码:
library(maptools) library(sp)
- 读取shapefile文件,可以直接输入文件路径或者通过file.choose函数来选择文件,这里采用国家基础地理信息系统1比400万数据中的省界国界。
vent.map <-readShapeSpatial(file.choose())
或者选择点、线、面类型输入
point.mp <- readShapePoints(file.choose()) line.mp <- readShapeLines(file.choose()) poly.mp <- readShapePoly(file.choose())
注意,这个命令并不导入Shapefiel的Proj文件,所以导入的是无坐标信息的数据。
print(proj4string(vent.map))
输出是:
[1] NA
- 查看shapefile属性,添加坐标信息
summary(vent.map)
输出是:
Object of class SpatialLinesDataFrame Coordinates: min max x 73.446960 135.08583 y 3.408477 53.55793 Is projected: NA proj4string : [NA] Data attributes: FNODE_ TNODE_ LPOLY_ RPOLY_ LENGTH Min. : 1.0 Min. : 1.0 Min. : 1.0 Min. : 1.0 Min. : 0.0040 1st Qu.: 433.0 1st Qu.: 432.0 1st Qu.: 1.0 1st Qu.: 1.0 1st Qu.: 0.0300 Median : 876.0 Median : 880.0 Median : 1.0 Median : 65.0 Median : 0.0700 Mean : 927.6 Mean : 929.9 Mean :128.8 Mean :210.8 Mean : 0.5421 3rd Qu.:1344.0 3rd Qu.:1344.0 3rd Qu.:204.0 3rd Qu.:327.0 3rd Qu.: 0.2350 Max. :2131.0 Max. :2131.0 Max. :925.0 Max. :926.0 Max. :16.7130 BOU2_4M_ BOU2_4M_ID GBCODE Min. : 1 Min. : 1 Min. :26010 1st Qu.: 447 1st Qu.: 219 1st Qu.:26010 Median : 893 Median :26010 Median :26010 Mean : 893 Mean :17260 Mean :35583 3rd Qu.:1339 3rd Qu.:26010 3rd Qu.:61010 Max. :1785 Max. :61156 Max. :99001
添加坐标信息
proj4string(vent.map) <- "+proj=longlat +datum=WGS84"
- 显示地图
plot(vent.map, axes=TRUE, border="gray")
R就会弹出新的窗口显示:如图-1所示:
图1 R显示地图
4.参考文献
[1]R (programming language) 2012 http://en.wikipedia.org/wiki/R_(programming_language)
[2]The R Project for Statistical Computing 2012
http://www.r-project.org/
[3]RevolutionAnalytics / RHadoop 2012 https://github.com/RevolutionAnalytics/RHadoop
本作品由VentLam创作,采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。