有没有人知道在R中是否有工具可以通过给定的纬度和经度找到某个位置的海拔高度?
有没有人知道在R中是否有工具可以通过给定的纬度和经度找到某个位置的海拔高度?
或者你可以使用从geonames获取的包,并从srtm3数字高程模型中得到值:
首先在geonames.org
注册以获得一个geonames用户名。然后设置它:
> 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&
即使是在虚拟数据上也无法工作,仍然会出现相同的错误。 - Rspacer更新:Earthtools已不存在,因此本回答已过时。我建议使用@Spacedman的回答。
正如DWin所说,这有两个部分:找到一个好的数据源和网络服务,然后在R中解析它。该回答使用earthtools.org
服务。
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。我使用方法有误吗? - Tyler Rinkergoogleway
软件包来实现这一点。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"
有诸如RCurl之类的R软件包可允许进行网络查询。还有一些网络资源,进一步的具体信息需要......嗯,更多具体信息。
http://gisdata.usgs.net/xmlwebservices2/elevation_service.asmx?op=getElevation
library(rgbif)
coords <- data.frame(decimalLatitude = 54.481084,
decimalLongitude = -3.220625)
elevation(coords, username = "myusernamehere")
如果您提供一个数据框作为输入,它必须包含名为decimalLatitude和decimalLongitude的坐标列,这与DarwinCore标准相关。
您可以使用参数“elevation_model”选择不同的模型选项。