【问题标题】:How to access multiple elevation points at the same time with get_elev_point如何使用 get_elev_point 同时访问多个高程点
【发布时间】:2021-04-27 23:47:18
【问题描述】:

我有另一个地理数据问题。我正在尝试使用 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 中获取地震数据并将其转换为只有经度和纬度的 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

您有什么技巧可以做到这一点,以便能够访问多个海拔点吗?

谢谢! ps.:不好意思问的笨拙,我现在才学习。

【问题讨论】:

    标签: r amazon-web-services geospatial elevatr


    【解决方案1】:

    这很可能是由于这些点在海中造成的,因此没有陆地高程 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。

    【讨论】:

    • 安德鲁说的基本正确。水中的点是这个错误的根源。话虽如此,大多数从陆地上掉下来的点都会有一个估计的深度。例如,elevatr::get_elev_point(data.frame(x=148, y = -14), ll_prj, src = "aws") 工作并返回一个深度,而 get_elev_point(data.frame(x=174, y = -14), ll_prj, src = "aws") 不工作。我不知道一种简单的检查方法,因为footprint 没有显示任何明显的东西。最好在提交之前检查点。
    • 另外,epqs 是仅限美国的服务,因此虽然它确实返回 NA,但它会返回美国以外的陆地区域的 NA。我不建议将其用于非美国位置。
    • 亲爱的@Andrew Chisholm 和亲爱的亲爱的,非常感谢您的回答。你写的确实是对的。但是,实际上我自己的数据坐标不在海中,直到现在它仍然无法正常工作。不知何故,我设法使它工作! :D 我想我只是需要一些支持 :D
    【解决方案2】:

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

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

    第一个问题是一个问题,因为我正在抓取给定经度的下一个更高的瓷砖。最终结果是一个不存在的 x/y/z 平铺,因此会返回错误。我有一个修复程序,它只抓取与给定经度相对应的图块,而不是下一个更高的图块。这已修复并推送到 https://github/jhollist/elevtr。

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

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多