R将轮廓线转换为高程图

时间:2015-02-27 11:44:00

标签: r gis rgdal maptools sp

我希望能够从R中的等高线创建高程图。我是使用形状文件的新手

目前我从here下载了数据  它为所有英国人提供.shp文件。

它还提供轮廓线,总结了英国的拓扑结构。

对于高程图,我想要data.framedata.table均匀间隔的点(彼此相距100米),以产生给出x,y和z值的数据输出。其中x和y代表纬度和经度(或东方和北方),z代表高度(以海拔高度为单位)。

我认为可能会有一些工具会自动为您执行插值,但我不确定它如何与地理空间数据配合使用。

这是我的基本开始......

require(maptools)
xx <- readShapeSpatial("HP40_line.shp")

1 个答案:

答案 0 :(得分:3)

选择“ASCII Grid和GML(Grid)”作为“OS Terrain 50”产品的下载格式,然后下载该文件。这将为您提供一个包含许多zip文件目录的zip文件,每个目录都包含英国50米高度网格的部分(我看到的部分有200 x 200个单元格,意味着10公里x 10公里)。我进入了目录data/su,在那里解压缩了zip文件,并完成了

library(raster)
r = raster("SU99.asc")
plot(r)

将其聚合到100米网格,我做了

r100 = aggregate(r) # default is factor 2: 50 -> 100 m

如上所述,建议是对网格进行处理,因为轮廓线是从网格中导出的,反之则是一种痛苦而且信息丢失很大。

将经度纬度的网格值作为data.frame获取可以通过两种方式完成:

df = as.data.frame(projectRaster(r, crs = CRS("+proj=longlat")), xy = TRUE)

以经度/纬度将网格取消投影到新网格。由于这些网格不能重合,因此最小程度地移动点(参见?projectRaster)。

第二个选项是将网格转换为点,并通过

将这些点取消投影到经度纬度
df2 = as.data.frame(spTransform(as(r, "SpatialPointsDataFrame"), CRS("+proj=longlat")))

这不会移动点,因此不会产生网格。