我正在尝试创建一个脚本,该脚本将为给定的一组坐标生成二维地形或等高线图。我的目标类似于
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
s,但 10 个纬度/经度对与高程数据除外。contour
可以处理NA
s,但结果是contour(df.w)
上面只有一条细线。我不知道从这里该去哪里。我只是需要更多积分吗?预先感谢您的任何帮助——我对 R 还很陌生,我想我在这个项目上已经付出了太多的努力。
抱歉延迟回复。我想我需要检查一下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)
如果需要使用的话graphic::contour()
,您需要首先将光栅对象转换为矩阵raster::as.matrix(elev)
。但这会翻转坐标,我还没有花足够的时间来尝试弄清楚这一部分......希望raster
解决方案适合您。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)