如何使用 get_elev_point 同时访问多个高程点

How to access multiple elevation points at the same time with get_elev_point

我还有一个地理数据问题。我正在尝试使用 get_elev_point ()

访问特定点的高程数据

我有大约 160 个点想要获取高程数据,所以我不想一个一个地做,但我不知道如何一次检索它们。

我已经对所有点进行了 data.frame,其中第一列 x 是经度,第二列 y 是纬度,这些是 data.frame.[=17= 中唯一的数据]

我正在使用 elevatr 包

可重现的例子:

location_1 <- data.frame (x=-7.37,y=5.775)

location_1_elev <-get_elev_point(locations = location_1, units="meters", prj = ll_prj, src = "aws")

当我这样做时,一切都很好,我得到了一个高程点,但是当我尝试同时访问多个点时,我 运行 出错了。

我从 R 中获取地震数据并将其转换为 data.frame 只有经度和纬度的数据。然后尝试通过 get_elev_points 访问高程点并收到错误消息:

data(quakes)

head(quakes)

locations <- data.frame(x = c(quakes$long, 1000), y = c(quakes$lat, 1000))

quakes_elev <-get_elev_point(locations = locations, units="meters", prj = ll_prj, src = "aws")

错误:API 没有 return tif

你有什么技巧ps如何做到这一点,以便能够访问多个高程点?

谢谢! ps.: 不好意思问了,我现在才学习

错误很可能是因为这些点在海中,所以没有陆地高程tif文件可以从中获取高程。例如,这里是一个示例,它试图找到海中某个点的高程,然后再找到陆地上某个点的高程。

    library(elevatr)
    ll_prj <- "EPSG:4326"
            
    sea <- data.frame(x=181.62, y=-20.42)
    # This errors
    sea_elev <- get_elev_point(locations = sea, units='meters', prj=ll_prj, src='aws')
    # Error: This url: https://s3.amazonaws.com/elevation-tiles-prod/geotiff/5/32/18.tif did not return a tif
    
    land <- data.frame(x=-71.3036, y=44.2700)
    # This works
    land_elev <- get_elev_point(locations = land, units='meters', prj=ll_prj, src='aws')
    land_elev$elevation
    # [1] 1478

使用 epqs 选项 returns NA 没有错误所以我想如果你想使用海平面作为海拔,你可以用 0 替换它。

我终于有时间研究这个了。

问题的根本原因是 1) 数据接近 180 度,以及 2) 经度使用 0 到 360。

第一个问题是我正在抓取给定经度的下一个更高的图块。最终结果是 x/y/z 不存在的图块,因此会 return 出错。我有一个修复程序,它只抓取与给定经度对应的图块,而不是下一个更高的。这是固定的并推送到 https:///github/jhollist/elevatr.

第二个问题是一个问题,因为 elevatr 假定经度在 -180 和 180 之间。因此,如果您将 quakes 数据集转换为此并使用较新版本的 elevatr GitHub,@kamilla-choni-pléh 代码将起作用。

install.packages("remotes")
remotes::install_github("jhollist/elevatr")
library(elevatr)
ll_prj <- "EPSG:4326"
data(quakes)
locations <- data.frame(x = c(quakes$long), y = c(quakes$lat))
locations$x <- ifelse(locations$x >= 180, locations$x - 360, locations$x)
quakes_elev <-get_elev_point(locations = locations, units="meters", prj = ll_prj, src = "aws")
quakes_elev$elevation

如果使用更高的缩放级别,虽然它可能会抱怨,因为它当前正在创建一个跨越 -180 到 180(即地球)的栅格。 elevatr.

我还在考虑应该怎么处理