楼主: genechip
27810 7

[程序分享] 空间数据处理及可视化—R的空间数据导入导出 [推广有奖]

  • 0关注
  • 6粉丝

已卖:823份资源

本科生

11%

还不是VIP/贵宾

-

威望
0
论坛币
1921 个
通用积分
0.5550
学术水平
6 点
热心指数
7 点
信用等级
5 点
经验
6770 点
帖子
32
精华
0
在线时间
75 小时
注册时间
2008-4-3
最后登录
2017-8-4

楼主
genechip 发表于 2015-3-11 15:25:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
空间数据分析专题||空间数据处理及可视化—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相关内容





二维码

扫码加我 拉你入群

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

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

关键词:空间数据 数据导入 数据处理 可视化 Arguments 温故而知新 system 经纬度 坐标系 中文

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kk22boy + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

沙发
Nicolle 学生认证  发表于 2015-3-11 21:03:05
提示: 作者被禁止或删除 内容自动屏蔽

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

板凳
vermouth86 发表于 2015-3-13 10:12:06
学习学习。。。。

报纸
shadamu 发表于 2015-7-17 18:21:36
r真是太强大了,今天开了眼

地板
迪拜· 发表于 2016-2-1 09:28:21
学习了 好强大的 R语言

7
lonestone 在职认证  发表于 2016-5-27 12:39:49
very good

8
lvrf16@lzu.edu. 发表于 2017-11-16 19:14:19
不知道在R语言中怎么将同一地区不同属性的栅格变成一个栅格

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 20:34