首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中创建地形图

在R中创建地形图
EN

Stack Overflow用户
提问于 2019-01-13 09:22:37
回答 1查看 2.6K关注 0票数 1

我正在尝试创建一个脚本,将生成一个给定坐标集的2d地形图或等高线地图。我的目标是类似于

contour(volcano)

而是针对用户设置的任何位置。这已经被证明是令人惊讶的挑战!我试过了:

代码语言:javascript
复制
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%s,但是contour(df.w)的结果只有一行。我不知道下一步该怎么走。我只是需要更多的积分吗?提前感谢您的帮助--我是R的新手,我认为我对这个项目的了解已经超出了我的能力。

EN

回答 1

Stack Overflow用户

发布于 2019-02-23 04:31:43

很抱歉,我延迟了回复。我想我需要检查一下elevatr的问题!

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

下面的代码示例以相当粗糙的分辨率抓取较小的区域。不过,合成的轮廓看起来还不错。

代码语言:javascript
复制
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解决方案能为您工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54165356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档