首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用get_elev_point同时访问多个高程点

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

Stack Overflow用户
提问于 2021-01-24 03:05:32
回答 2查看 93关注 0票数 0

我还有一个关于地理数据的问题。我正在尝试使用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

你有什么建议吗?如何实现这一点,以便能够访问多个高程点?

谢谢!附言:很抱歉我问得很笨拙,我现在只是在学习。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-24 04:30:59

错误很可能是因为这些点在海中,所以没有陆地高程tif文件来获取高程。例如,下面是一个示例,该示例先尝试查找海中点的高程,然后再查找陆上某点的高程。

代码语言:javascript
复制
    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。

票数 2
EN

Stack Overflow用户

发布于 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代码将正常工作。

代码语言:javascript
复制
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中处理这个问题。

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

https://stackoverflow.com/questions/65863300

复制
相关文章

相似问题

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