Convertir la latitude et de la longitude de nom de pays dans la R

J'ai une liste de latitude et de longitude, et souhaitez découvrir les pays d'où ils résident tous dans.

J'ai modifié une réponse de cette question de la lat-long aux états-unis, et disposer d'une fonction, mais je rencontre le problème que la worldHires carte (à partir de la mapdata package) est affreusement de jour et contient beaucoup de l'obsolescence des pays comme la Yougoslavie et l'URSS.

Comment puis-je modifier cette fonction pour utiliser une plus modernes paquet, comme rworldmap? J'ai seulement réussi à déjouer moi-même de si loin...

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...
Le paquet de cartes est maintenant mis à jour avec de nouveaux pays. Pas plus URSS ou de la Yougoslavie, etc.

OriginalL'auteur Iain S | 2013-01-15