r读取shape文件可视化_空间数据处理及可视化—R的空间数据导入导出

http://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")

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

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

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

#查看投影信息proj4string(China_Proj)

#可视化plot(China_Proj, axes=TRUE, border="grey")

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

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

#添加投影后的格网plot(grd_BNG, add=TRUE, lty=2)

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

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

#添加投影后的标记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

除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

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

将去除海平面以下高度数据的海拔数据输出为tif格式:rf

下一期预告

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

你可能感兴趣的:(r读取shape文件可视化)