如何使用 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
.
我还在考虑应该怎么处理
我还有一个地理数据问题。我正在尝试使用 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
.