【问题标题】:R Converting contour lines to elevation plotR将等高线转换为高程图
【发布时间】:2015-04-30 02:55:47
【问题描述】:

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

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

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

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

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

这是我的基本开始...

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

【问题讨论】:

  • 你应该直接下载grid版本,使用raster包放大数据,得到一个SpatialPointsDataFrame。
  • 你能告诉我怎么做吗?
  • 我不确定网格版本是什么,但不认为它可用...

标签: r gis rgdal maptools sp


【解决方案1】:

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

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

【讨论】:

  • 我没有看到 .grd 类型的文件...我只看到 .asc .gml 和 .prj
  • 另外我如何获得包含纬度、经度、高度三列的data.frame?
  • 你是对的:扩展名是.asc,而不是.grd,我更正了上面的答案;你可以通过as.data.frame(r100, xy = TRUE)获得data.frame
  • 感谢您,这非常有用。所以我注意到在执行as.data.frame(r100, xy = TRUE)时x和y值不是纬度和经度,我怎么把它转换成这样......
  • 好的,我在答案中添加了这个。
猜你喜欢
  • 2020-03-29
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 2014-09-02
  • 2017-11-18
相关资源
最近更新 更多