How to batch geocode using googleway with tidyverse functions?

天涯浪子 提交于 2019-12-24 22:12:17

问题


I was looking for a way to do batch geocoding using googleway's google_geocode(), which is only able to return one result at a time. I wanted to use tidyverse functions, and other answers made use of the older and more confusing apply family of functions.


回答1:


Here's my solution using tidyverse functions.

This gets the geocode and also the formatted address in case you want it (other components of the result can be returned as well, they just need to be added to the table in the last row of the map function that gets returned.

suppressPackageStartupMessages(require(tidyverse))
suppressPackageStartupMessages(require(googleway))

set_key("your key here")

df <- tibble(full_address = c("2379 ADDISON BLVD HIGH POINT 27262", 
                                      "1751 W LEXINGTON AVE HIGH POINT 27262", "dljknbkjs"))

df %>% 
  mutate(geocode_result = map(full_address, function(full_address) {
    res <- google_geocode(full_address) 

    if(res$status == "OK") {

      geo <- geocode_coordinates(res) %>% as_tibble()

      formatted_address <- geocode_address(res)

      geocode <- bind_cols(geo, formatted_address = formatted_address)
    }
    else geocode <- tibble(lat = NA, lng = NA, formatted_address = NA)

    return(geocode)

  })) %>%
  unnest()
#> # A tibble: 3 x 4
#>   full_address                  lat   lng formatted_address                
#>   <chr>                       <dbl> <dbl> <chr>                            
#> 1 2379 ADDISON BLVD HIGH POI…  36.0 -80.0 2379 Addison Blvd, High Point, N…
#> 2 1751 W LEXINGTON AVE HIGH …  36.0 -80.1 1751 W Lexington Ave, High Point…
#> 3 dljknbkjs                    NA    NA   <NA>

Created on 2019-04-14 by the reprex package (v0.2.1)



来源:https://stackoverflow.com/questions/55680598/how-to-batch-geocode-using-googleway-with-tidyverse-functions

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!