Konwertuj współrzędne szerokości i długości geograficznej na nazwę kraju w R

Mam listę współrzędnych szerokości i długości geograficznej i chcę dowiedzieć się, w jakim kraju się znajdują.

Zmodyfikowałem odpowiedź zto pytanie dotyczące lat do Stanów Zjednoczonych, i mieć działającą funkcję, ale natrafiam na problem, żeworldHires mapa (odmapdata pakiet) jest okropnie nieaktualny i zawiera wiele przestarzałych krajów, takich jak Jugosławia i ZSRR.

Jak zmodyfikowałbym tę funkcję, aby użyć bardziej nowoczesnego pakietu, takiego jakrworldmap? Dotychczas udało mi się tylko sfrustrować ...

library(sp)
library(maps)
library(rgeos)
library(maptools)

# The single argument to this function, points, is a data.frame in which:
#   - column 1 contains the longitude in degrees
#   - column 2 contains the latitude in degrees
coords2country = function(points)
{
    # prepare a SpatialPolygons object with one poly per country
    countries = map('worldHires', fill=TRUE, col="transparent", plot=FALSE)
    names = sapply(strsplit(countries$names, ":"), function(x) x[1])

    # clean up polygons that are out of bounds
    filter = countries$x < -180 & !is.na(countries$x)
    countries$x[filter] = -180

    filter = countries$x > 180 & !is.na(countries$x)
    countries$x[filter] = 180

    countriesSP = map2SpatialPolygons(countries, IDs=ids, proj4string=CRS("+proj=longlat +datum=wgs84"))


    # convert our list of points to a SpatialPoints object
    pointsSP = SpatialPoints(points, proj4string=CRS("+proj=longlat +datum=wgs84"))


    # use 'over' to get indices of the Polygons object containing each point 
    indices = over(pointsSP, countriesSP)


    # Return the state names of the Polygons object containing each point
    myNames = sapply(countriesSP@polygons, function(x) x@ID)
    myNames[indices]
}

##
## this works... but it has obsolete countries in it
## 

# set up some points to test
points = data.frame(lon=c(0, 5, 10, 15, 20), lat=c(51.5, 50, 48.5, 47, 44.5))

# plot them on a map
map("worldHires", xlim=c(-10, 30), ylim=c(30, 60))
points(points$lon, points$lat, col="red")

# get a list of country names
coords2country(points)
# returns [1] "UK"         "Belgium"    "Germany"    "Austria"    "Yugoslavia"
# number 5 should probably be in Serbia...

questionAnswers(2)

yourAnswerToTheQuestion