with request_denied over_query_limit long lat failed example address r latitude-longitude google-geocoder

request_denied - Coordenadas de latitud longitud a código de estado en R



ggmap api key r (5)

¿Existe una forma rápida de convertir las coordenadas de latitud y longitud en códigos de estado en R? He estado usando el paquete zipcode como una tabla de consulta, pero es demasiado lento cuando estoy consultando muchos valores de latitud / longitud

Si no está en R, ¿hay alguna forma de hacerlo utilizando google geocoder o cualquier otro tipo de servicio de consulta rápida?

¡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ía de la función simplemente prepara los objetos SpatialPoints y SpatialPolygons que necesita la función over() en el paquete sp , lo que hace el verdadero 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


Datos de ejemplo (polígonos y puntos)

library(raster) pols <- shapefile(system.file("external/lux.shp", package="raster")) xy <- coordinates(p)

Use raster :: extract

extract(p, xy) # point.ID poly.ID ID_1 NAME_1 ID_2 NAME_2 AREA #1 1 1 1 Diekirch 1 Clervaux 312 #2 2 2 1 Diekirch 2 Diekirch 218 #3 3 3 1 Diekirch 3 Redange 259 #4 4 4 1 Diekirch 4 Vianden 76 #5 5 5 1 Diekirch 5 Wiltz 263 #6 6 6 2 Grevenmacher 6 Echternach 188 #7 7 7 2 Grevenmacher 7 Remich 129 #8 8 8 2 Grevenmacher 12 Grevenmacher 210 #9 9 9 3 Luxembourg 8 Capellen 185 #10 10 10 3 Luxembourg 9 Esch-sur-Alzette 251 #11 11 11 3 Luxembourg 10 Luxembourg 237 #12 12 12 3 Luxembourg 11 Mersch 233


Es muy sencillo usar sf :

library(maps) library(sf) ## Get the states map, turn into sf object US <- st_as_sf(map("state", plot = FALSE, fill = TRUE)) ## Test the function using points in Wisconsin and Oregon testPoints <- data.frame(x = c(-90, -120), y = c(44, 44)) # Make it a spatial dataframe, using the same coordinate system as the US spatial dataframe testPoints <- st_as_sf(testPoints, coords = c("x", "y"), crs = st_crs(US)) #.. and perform a spatial join! st_join(testPoints, US) ID geometry 1 wisconsin POINT (-90 44) 2 oregon POINT (-120 44)


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. Necesitarás tener los límites del estado como un SpatialPolygonDataFrame.