Преобразование широты / долготы в высоту в 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'.

Другие вопросы по тегам