R将等高线转换为高程图
R Converting contour lines to elevation plot
我希望能够从 R 中的等高线创建海拔图。我对使用形状文件还很陌生
目前我已经从here下载了数据
它为整个英国提供 .shp 文件。
它还提供等高线,总结了英国的拓扑结构。
对于高程图,我想要一个 data.frame
或 data.table
均匀分布的点(彼此相距 100m)以产生给出 x、y 和 z 值的数据输出。其中 x 和 y 代表纬度和经度(或东距和北距),z 代表高度(以米为单位)。
我认为可能有一些工具可以自动为您执行插值,但不确定它如何处理地理空间数据。
这是我的基本开始...
require(maptools)
xx <- readShapeSpatial("HP40_line.shp")
选择 "ASCII Grid and 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")))
这不会移动点,因此不会产生网格。
我希望能够从 R 中的等高线创建海拔图。我对使用形状文件还很陌生
目前我已经从here下载了数据 它为整个英国提供 .shp 文件。
它还提供等高线,总结了英国的拓扑结构。
对于高程图,我想要一个 data.frame
或 data.table
均匀分布的点(彼此相距 100m)以产生给出 x、y 和 z 值的数据输出。其中 x 和 y 代表纬度和经度(或东距和北距),z 代表高度(以米为单位)。
我认为可能有一些工具可以自动为您执行插值,但不确定它如何处理地理空间数据。
这是我的基本开始...
require(maptools)
xx <- readShapeSpatial("HP40_line.shp")
选择 "ASCII Grid and 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")))
这不会移动点,因此不会产生网格。