我还有一个关于地理数据的问题。我正在尝试使用get_elev_point ()访问特定点的高程数据
我有大约160个点,我想要获得的高程数据,所以我不想逐个做,但我不知道如何检索它们一次。
我已经为我所有的点创建了一个data.frame,其中第一列x是经度,第二列y是纬度,这是data.frame中唯一的数据。
我正在使用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未返回tif
你有什么建议吗?如何实现这一点,以便能够访问多个高程点?
谢谢!附言:很抱歉我问得很笨拙,我现在只是在学习。
发布于 2021-01-24 04:30:59
错误很可能是因为这些点在海中,所以没有陆地高程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。
发布于 2021-10-05 17:38:12
我终于有时间调查这件事了。
问题的根本原因是1)接近180度的数据,以及2)使用0到360的经度。
第一个问题是一个问题,因为我正在为给定的经度抓取下一个更高的瓦片。最终结果是一个不存在的x/y/z块,因此将返回一个错误。我有一个解决方案,它只抓取与给定经度对应的瓦片,而不是下一个更高的瓦片。这已修复并推送到https://github/jhollist/elevatr。
第二个问题是一个问题,因为elevatr假设经度在-180到180之间。因此,如果您将quakes数据集转换为此数据集,并在GitHub上使用较新版本的elevatr,则@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中处理这个问题。
https://stackoverflow.com/questions/65863300
复制相似问题