R 将等高线转换为高程图

标签 r gis rgdal r-maptools r-sp

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

目前我已从 here 下载数据 它为整个英国提供 .shp 文件。

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

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

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

这是我的基本开始...

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

最佳答案

选择“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")))

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

关于R 将等高线转换为高程图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764341/

相关文章:

r - Plotly 中的缩放问题,R 编程

r - 如何粘贴数据框行中的文本,仅保留 R 中的唯一值

google-maps - 用于环境事业的众包 map 编辑应用程序

google-maps - 如何在 Google map 上显示自定义矢量图 block

RGDAL 不会安装

r - 从单个矩阵创建多个单独的热图

r - 通过分配列聚合 data.frame 中的行

r - 仅在 tmap 中绘制图例

r - 如何计算R中沿线的两点之间的地理距离?

r - 在 SpatialPixelsDataFrame 上叠加 shapefile 时生成的 NA