在R中创建地形图

时间:2019-01-13 01:22:37

标签: r maps elevatr

我正在尝试创建一个脚本,该脚本将为给定的一组坐标生成二维地形图或轮廓图。我的目标与

产生的东西相似

contour(volcano)

,但对于用户设置的任何位置。事实证明,这极具挑战性!我尝试过:

library(elevatr)
library(tidyr)

# Generate a data frame of lat/long coordinates.
ex.df <- data.frame(x=seq(from=-73, to=-71, length.out=10), 
                       y=seq(from=41, to=45, length.out=10))

# Specify projection.
prj_dd <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

# Use elevatr package to get elevation data for each point.
df.sp <- get_elev_point(ex.df, prj = prj_dd, src = "epqs")

# Convert from spatial to regular data frame, remove extra column.
# Use tidyr to convert to lat x lon table with elevation as fill.
# Sorry for the terrible code, I know this is sloppy.
df <- as.data.frame(df.sp)
df$elev_units <- NULL
df.w <- df %>% spread(y, elevation)
df.w <- as.matrix(df.w)

这将创建一个类似于volcano数据集的矩阵,但用NA填充,除了具有海拔数据的10个经纬度对。 contour可以处理NA,但是contour(df.w)的结果只有一条细线。我不确定从这里去哪里。我是否只需要更多积分?在此先感谢您提供的任何帮助-我对R还是很陌生,我认为我付出的努力超过了我对这个项目的了解。

1 个答案:

答案 0 :(得分:0)

很抱歉延迟回复。我想我需要检查elevatr个问题!

我将使用elevatr::get_elev_raster(),它返回一个可以直接用raster::contour()绘制的栅格对象。

下面的代码示例以较小的分辨率捕获较小的区域。最终的轮廓看起来不错。

library(elevatr)
library(raster)

# Generate a data frame of lat/long coordinates.
ex.df <- data.frame(x=seq(from=-73, to=-72.5, length.out=10), 
                    y=seq(from=41, to=41.5, length.out=10))

# Specify projection.
prj_dd <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

# Use elevatr package to get elevation data for each point.
elev <- get_elev_raster(ex.df, prj = prj_dd, z = 10, clip = "bbox")

raster::contour(elev)

enter image description here

如果需要使用graphic::contour(),则需要首先使用raster::as.matrix(elev)将栅格对象转换为矩阵。但是,这使事情发生了翻天覆地的变化,而且我还没有花费足够的时间来尝试解决这一问题。希望raster解决方案对您有用。