user1165199
user1165199

Reputation: 6649

Conversion for latitude/longitude to altitude in R

Does anyone know if there is a tool in R to find the height above sea level of a location, given the latitude and longitude ?

Upvotes: 9

Views: 8899

Answers (5)

R. Lima
R. Lima

Reputation: 411

You can also use package rgbif which uses geonames internally. I like this option because you can provide a data frame as input, as well as other input formats. Again, you need to provide your GeoNames user name.

library(rgbif)

coords <- data.frame(decimalLatitude = 54.481084, 
                     decimalLongitude = -3.220625)

elevation(coords, username = "myusernamehere")

If you provide a data frame as input, it must contain the coordinates columns named as decimalLatitude and decimalLongitude, which relates to the DarwinCore standards.

You can choose among different options of models using the argument 'elevation_model'.

Upvotes: 0

Spacedman
Spacedman

Reputation: 94277

Or you can use the package that looks up from geonames, and get the value from the srtm3 digital elevation model:

First get a geonames username by registering at geonames.org. Then set it:

> options(geonamesUsername="myusernamehere")

then:

> require(geonames)
> GNsrtm3(54.481084,-3.220625)
  srtm3       lng      lat
1   797 -3.220625 54.48108

or the gtopo30 model:

> GNgtopo30(54.481084,-3.220625)
  gtopo30       lng      lat
1     520 -3.220625 54.48108

geonames is on CRAN so install.packages("geonames") will get it.

The difference between these two models is because they are only approximations based on satellite data. Don't go expecting to pinpoint mountains from this.

Upvotes: 13

Richie Cotton
Richie Cotton

Reputation: 121137

Update: Earthtools no longer exists, so this answer is obsolete. I recommend @Spacedman's answer instead.

As DWin said, there are two parts to this: find a good source of data with a web service, then parse it in R. This answer uses the 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)))

Upvotes: 10

SymbolixAU
SymbolixAU

Reputation: 26258

You can access elevation data through Google Maps Elevation API. And in R you can use this through my googleway package

To use Google Maps API you need an API key

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"

Upvotes: 2

IRTFM
IRTFM

Reputation: 263471

There are R packages such as RCurl that allow web queries. There are also web resources, Further specfics will require .... well, ... more specifics.

http://gisdata.usgs.net/xmlwebservices2/elevation_service.asmx?op=getElevation

Upvotes: 1

Related Questions