r语言 - 如何使用get_elev_point同时访问多个高程点



我还有一个地理数据问题。我试图访问特定点的高程数据与get_elev_point ()

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

我已经创建了一个data.frame,其中第一列x是经度,第二列y是纬度,这些是data.frame中唯一的数据。

我正在使用电梯包

可再生的例子: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获取地震数据并将其转换为只有经度和纬度的数据框架。然后尝试通过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没有返回tif

你有什么技巧如何做到这一点,能够访问多个海拔点?

谢谢!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选项返回NA没有错误,所以我想你可以用0代替,如果你想使用海平面作为海拔。

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

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

第一个问题是,当我为给定的经度抓取下一个更高的贴图时。最终结果是一个不存在的x/y/z贴图,因此会返回一个错误。我有一个修复,只捕获对应于给定经度的瓷砖,而不是下一个更高的。这是固定的,并推到https://github/jhollist/elevatr。

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

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中处理这个问题。

最新更新