2

我希望能够从 R 中的等高线创建一个高程图。我对使用形状文件非常陌生

目前我已经从这里下载了数据, 这些数据提供了适用于整个英国的 .shp 文件。

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

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

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

这是我的基本开始...

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

1 回答 1

3

选择“ASCII Grid and GML (Grid)”作为“OS Terrain 50”产品的下载格式,下载文件。这将为您提供一个 zip 文件,其中包含许多 zip 文件目录,每个目录都包含英国 50 m 高程网格的一部分(我查看的部分有 200 x 200 个单元格,即 10 km x 10 km)。我进入目录data/su,在那里解压缩了 zip 文件,然后

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

把它聚合到一个 100 m 的网格中,我做了

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")))

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

于 2015-02-28T19:58:46.817 回答