全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
27694 7
2015-03-11
空间数据分析专题||空间数据处理及可视化—R的空间数据导入导出2015-03-04xxiao513http://www.epsg-registry.org/)中的一个编码:EPSG:4030,通过http://www.epsg-registry.org/可以查看所有坐标系编码。

CRS("+init=epsg:4030")

CRS arguments:

+init=epsg:4030 +proj=longlat +ellps=WGS84 +no_defs

可以看到参数和所获取的一模一样,这个坐标系是一个以经纬度为单位的球面地理坐标系,如果以经纬度为横纵坐标绘图,绘图结果如下:

plot(China, axes=TRUE, border="gray")


接下来,将球面坐标投影成平面坐标,并添加经纬度格网投影的结果:

#定义一个新的平面投影坐标系,叫北京54

newCRS <- CRS("+init=epsg:2431")

#将地图坐标进行投影变换得到新地图

China_Proj <- spTransform(China, newCRS)

#查看投影信息

proj4string(China_Proj)

#可视化

plot(China_Proj, axes=TRUE, border="grey")

#获取地理坐标系下的经纬度格网

grd_LL <- gridlines(China, ndiscr=100)

#将格网投影为二维平面坐标

grd_BNG <- spTransform(grd_LL, newCRS)

#添加投影后的格网

plot(grd_BNG, add=TRUE, lty=2)

#获取球坐标系下网格线的经纬度标记点

grdtxt_LL <- gridat(China)

#将网格线经纬度标记转换为投影坐标系下

grdtxt_BNG <- spTransform(grdtxt_LL, newCRS)

#添加投影后的标记

text(coordinates(grdtxt_BNG),     labels=parse(text=as.character(grdtxt_BNG$labels)))绘图结果如下所示,可以看到球坐标到平面坐标存在着变形,所以在可视化时需要选择好坐标系并将数据统一到统一坐标系下。


2.空间数据的导入和导出

第一期我们提到空间数据分成两大类,一类是矢量数据包括点线面等,第二类是栅格数据,如卫星地图影像。

2.1    矢量数据导入导出

常使用的矢量空间数据格式是ESRI规定的shapefile。这种格式用至少三个文件表示矢量数据,其中最主要的就是存储几何拓扑信息的.shp文件和存储属性数据的.dbf文件。读入该数据格式的方法有多种,在1部分就介绍了通过rgdal包的readOGR()函数读入外部shp格式的中国地图(世界各国的行政区划文件可以从这里http://gadm.org/找到)。

library(rgdal)

#读入中国省级地图,为一个SpatialPolygonsDataFrame对象

China <- readOGR("D:\\China_province_shp","Provinces_region")

除rgdal包外,还有maptools包的readShapePoints、readShapelines和readShapePoly函数,用于读取shp数据到R的sp对象。另外还有shapefile包、PBSmapping包等也可以以类似的方式读入shp数据转换为R的空间对象。

导出和一般的R文件导出一样,有read就有对应的write。例如我们想将1部分中投影后的中国地图保存为shp文件:

#输出投影后的中国地图为shp文件

writeOGR(China_Proj, "D:\\China_province_shp", "Provinces_region_prj", driver="ESRI Shapefile")

也可以将地理坐标系下的中国省级地图输出为谷歌地球能加载的kml格式,这样就能以更有趣的互动方式查看数据了。

#输出地理坐标系下的中国地图为kml文件

writeOGR(China, "D:\\China_province_shp\\ChinaProvinces.kml", "Provinces_region", driver="KML")

在安装完谷歌地球后打开,加载输出的kml文件:



2.2    栅格数据导入导出

栅格数据是图像数据,其中每个栅格内有其属性值,最常见的栅格数据为高程数据,记录每个位置的海拔高度值。处理栅格数据的包主要有raster和rgdal包,raster的读取和输出部分依赖于rgdal包。以Applied Spatial Data Analysis with R书中的奥克兰海拔数据为例导入格式为tiff的栅格数据并可视化:

library(raster)

#使用raster函数读入tif格式的栅格数据

r <- raster("D:\\China_province_shp\\70042108.tif")

#将栅格数据中海拔小于等于0的部分值设置为NA,绘图不显示

out <- raster(r)bs <- blockSize(out)out <- writeStart(out, filename = tempfile(), overwrite = TRUE)for (i in 1:bs$n) {  v <- getValues(r, row = bs$row, nrows = bs$nrows)  v[v <= 0] <- NA  writeValues(out, v, bs$row)  }out <- writeStop(out)par(mar=c(2,0.5,0.5,1))plot(out, col = terrain.colors(100))


将去除海平面以下高度数据的海拔数据输出为tif格式:rf <- writeRaster(out, filename="D:\\China_province_shp\\test.tif", format="GTiff", overwrite=TRUE)

下一期预告

将为大家介绍空间数据可视化部分。先从传统的R语言绘图系统开始,介绍更加灵活的图形可视化技巧。


qrcode_for_gh_4a747f323181_344.jpg
扫一扫 获取更多R相关内容





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-3-11 21:03:05
提示: 作者被禁止或删除 内容自动屏蔽
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-3-11 23:16:54
感谢楼主发帖!
还有两个问题请教楼主:
1.楼主能否详细讲一下下面这个命令呀,特别是这个CRS中的选项。。。
#定义一个新的平面投影坐标系,叫北京54
newCRS <- CRS("+init=epsg:2431")
2.如果已经知道中国各个城市的经纬度坐标,如何转成以米为单位的坐标呢?
谢啦
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-3-13 10:12:06
学习学习。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-17 18:21:36
r真是太强大了,今天开了眼
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-2-1 09:28:21
学习了 好强大的 R语言
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群