Преобразование широты / долготы в высоту в R
Кто-нибудь знает, есть ли в R инструмент для определения высоты над уровнем моря, с учетом широты и долготы?
5 ответов
Или вы можете использовать пакет, который ищет в geonames, и получить значение из цифровой модели рельефа srtm3:
> 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") получит его.
Разница между этими двумя моделями заключается в том, что они представляют собой только приближения, основанные на спутниковых данных. Не ждите, чтобы определить горы от этого.
Обновление: 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)))
Вы можете получить доступ к данным высот через 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, которые разрешают веб-запросы. Есть также веб-ресурсы, дальнейшие спецификации потребуют.... ну,... больше подробностей.
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'.