我希望能够从R中的等高线创建高程图。我是使用形状文件的新手
目前我从here下载了数据 它为所有英国人提供.shp文件。
它还提供轮廓线,总结了英国的拓扑结构。
对于高程图,我想要data.frame
或data.table
均匀间隔的点(彼此相距100米),以产生给出x,y和z值的数据输出。其中x和y代表纬度和经度(或东方和北方),z代表高度(以海拔高度为单位)。
我认为可能会有一些工具会自动为您执行插值,但我不确定它如何与地理空间数据配合使用。
这是我的基本开始......
require(maptools)
xx <- readShapeSpatial("HP40_line.shp")
答案 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")))
这不会移动点,因此不会产生网格。