使用FCC API将纬度/经度转换为县码

时间:2020-11-05 15:23:56

标签: r json function api-design

由于@caldwellst和@rohit,我之前已经弄清楚了如何使用FCC API(Apply an API Function over 2 columns of Dataframe, Output a Third Column)将纬度/经度转换为县FIPS代码。不幸的是,FCC修改了API,我不知道如何修复代码才能再次工作。

以下是新API的链接:https://geo.fcc.gov/api/census/

这是我的数据框:

> head(df_coords)

# A tibble: 6 x 3
     lon   lat censusYear
   <dbl> <dbl>      <dbl>
1 -112.   33.4       2010
2  -73.2  44.5       2010
3  -88.2  41.9       2010
4  -88.2  41.9       2010
5  -88.4  41.9       2010
6  -77.1  39.0       2010

这是我先前借用/修改的功能以及运行它的命令:

geo2fips <- function(latitude, longitude) { 
  url <- "https://geo.fcc.gov/api/census/block/find?format=json&latitude=%f&longitude=%f"
  url <- sprintf(url, latitude, longitude)
  json <- RCurl::getURL(url)
  json <- RJSONIO::fromJSON(json)
  as.character(json$County['FIPS'])
}

df_fips$county_fips <- mapply(geo2fips, df_fips$lat, df_fips$lon)

这是我运行它时收到的错误消息:


 Error in function (type, msg, asError = TRUE)  : 
  Unknown SSL protocol error in connection to geo.fcc.gov:443 

有人可以帮我解决这个问题吗?我认为这可能与普查年份的要求有关,因此我尝试按以下方式修改代码,但返回了相同的错误消息:

 geo2fips <- function(latitude, longitude, censusYear) { 
+   url <- "https://geo.fcc.gov/api/census/block/find?format=json&latitude=%f&longitude=%f&censusYear=%f"
+   url <- sprintf(url, latitude, longitude, censusYear)
+   json <- RCurl::getURL(url)
+   json <- RJSONIO::fromJSON(json)
+   as.character(json$County['FIPS'])
+ }
> df_coords$county_fips <- mapply(geo2fips, df_coords$lat, df_coords$lon, df_coords$censusYear)
 Error in function (type, msg, asError = TRUE)  : 
  Unknown SSL protocol error in connection to geo.fcc.gov:443 
> 

非常感谢任何可以提供帮助的人。 -迈克

1 个答案:

答案 0 :(得分:1)

URL和参数稍有更改-您可以使用:

geo2fips <- function(latitude, longitude) { 
  url <- "https://geo.fcc.gov/api/census/area?lat=%f&lon=%f&format=json"
  res <- jsonlite::fromJSON(sprintf(url, latitude, longitude))[["results"]][["county_fips"]]
  unique(res)
}

如果您使用jsonlite软件包而不是RSJONIO,因为前者直接接受连接,您还可以简化一些事情。