【发布时间】:2012-02-16 22:10:52
【问题描述】:
有谁知道R中是否有一个工具可以根据纬度和经度找到一个位置的海拔高度?
【问题讨论】:
-
您想知道地球表面给定位置的高度是多少?
标签: r latitude-longitude altitude
有谁知道R中是否有一个工具可以根据纬度和经度找到一个位置的海拔高度?
【问题讨论】:
标签: r latitude-longitude altitude
或者你可以使用从geonames中查找的包,从srtm3数字高程模型中获取值:
首先通过geonames.org 注册获得一个地名用户名。然后设置:
> options(geonamesUsername="myusernamehere")
然后:
> require(geonames)
> GNsrtm3(54.481084,-3.220625)
srtm3 lng lat
1 797 -3.220625 54.48108
或 gtopo30 模型:
> GNgtopo30(54.481084,-3.220625)
gtopo30 lng lat
1 520 -3.220625 54.48108
geonames 在 CRAN 上,所以 install.packages("geonames") 会得到它。
这两种模型的区别在于它们只是基于卫星数据的近似值。不要指望从中找出山脉。
【讨论】:
Error in url(url, open = "r") : cannot open the connection to 'http://api.geonames.org/srtm3JSON?lat=NA&lng=NA& 即使在虚拟数据上也不起作用..同样的错误
更新:Earthtools 不再存在,因此此答案已过时。我推荐@Spacedman 的答案。
正如 DWin 所说,这有两个部分:使用 Web 服务找到一个好的数据源,然后在 R 中解析它。这个答案使用 earthtools.org service。
library(RCurl)
library(XML)
latitude <- 52.4822
longitude <- -1.8946
url <- paste(
"http://www.earthtools.org/height",
latitude,
longitude,
sep = "/"
)
page <- getURL(url)
ans <- xmlTreeParse(page, useInternalNodes = TRUE)
heightNode <- xpathApply(ans, "//meters")[[1]]
(height <- as.numeric(xmlValue(heightNode)))
【讨论】:
latitude <- 41.25 和 longitude <- -77.3 产生 293 而不是预期的 597。我是不是用错了?
您可以通过 Google Maps Elevation API 访问海拔数据。在 R 中,您可以通过我的 googleway 包使用它
要使用 Google Maps API,您需要一个 API 密钥
library(googleway)
api_key <- "your_api_key"
df_locations <- data.frame(lat = c(54.481084), lon = c(-3.220625))
google_elevation(df_locations = df_locations, key = api_key)
# $results
# elevation location.lat location.lng resolution
# 1 813.9291 54.48108 -3.220625 610.8129
#
# $status
# [1] "OK"
【讨论】:
有 R 包,例如 RCurl,允许 Web 查询。还有网络资源,进一步的规范将需要......嗯,......更多的细节。
http://gisdata.usgs.net/xmlwebservices2/elevation_service.asmx?op=getElevation
【讨论】:
您还可以使用在内部使用地名的包 rgbif。我喜欢这个选项 因为您可以提供数据框作为输入,以及其他输入格式。同样,您需要提供您的 GeoNames 用户名。
library(rgbif)
coords <- data.frame(decimalLatitude = 54.481084,
decimalLongitude = -3.220625)
elevation(coords, username = "myusernamehere")
如果您提供数据框作为输入,它必须包含名为 decimalLatitude 和 decimalLongitude 的坐标列,这与 DarwinCore 标准相关。
您可以使用参数“elevation_model”在不同的模型选项中进行选择。
【讨论】: