La longitud de latitud se coordina con el código de estado en R

¿Hay una forma rápida de convertir coordenadas de latitud y longitud a códigos de estado en R? He estado usando el paquete de código postal como una tabla de búsqueda, pero es demasiado lento cuando consulto muchos valores lat / long

Si no está en R, ¿hay alguna forma de hacerlo con google geocoder o con cualquier otro tipo de servicio de consultas rápidas?

¡Gracias!

Aquí hay una función que toma un data.frame de lat-longs dentro de los 48 estados más bajos, y para cada punto, devuelve el estado en el que se encuentra.

La mayor parte de la función simplemente prepara los objetos SpatialPoints y SpatialPolygons necesarios para la función over() en el paquete sp , que hace el trabajo pesado de calcular la “intersección” de puntos y polígonos:

 library(sp) library(maps) library(maptools) # The single argument to this function, pointsDF, is a data.frame in which: # - column 1 contains the longitude in degrees (negative in the US) # - column 2 contains the latitude in degrees latlong2state <- function(pointsDF) { # Prepare SpatialPolygons object with one SpatialPolygon # per state (plus DC, minus HI & AK) states <- map('state', fill=TRUE, col="transparent", plot=FALSE) IDs <- sapply(strsplit(states$names, ":"), function(x) x[1]) states_sp <- map2SpatialPolygons(states, IDs=IDs, proj4string=CRS("+proj=longlat +datum=WGS84")) # Convert pointsDF to a SpatialPoints object pointsSP <- SpatialPoints(pointsDF, proj4string=CRS("+proj=longlat +datum=WGS84")) # Use 'over' to get _indices_ of the Polygons object containing each point indices <- over(pointsSP, states_sp) # Return the state names of the Polygons object containing each point stateNames <- sapply(states_sp@polygons, function(x) x@ID) stateNames[indices] } # Test the function using points in Wisconsin and Oregon. testPoints <- data.frame(x = c(-90, -120), y = c(44, 44)) latlong2state(testPoints) [1] "wisconsin" "oregon" # IT WORKS 

Puedes hacerlo en unas pocas líneas de R.

 library(sp) library(rgdal) #lat and long Lat <- 57.25 Lon <- -9.41 #make a data frame coords <- as.data.frame(cbind(Lon,Lat)) #and into Spatial points <- SpatialPoints(coords) #SpatialPolygonDataFrame - I'm using a shapefile of UK counties counties <- readOGR(".", "uk_counties") #assume same proj as shapefile! proj4string(points) <- proj4string(counties) #get county polygon point is in result <- as.character(over(points, counties)$County_Name) 

Ver? Sobre en el paquete sp. Deberá tener los límites de estado como un SpatialPolygonDataFrame.

Intereting Posts