【问题标题】:Census Batch Geocoding API with source addresses in data frame (not CSV) in R人口普查批量地理编码 API 与 R 中数据帧(非 CSV)中的源地址
【发布时间】:2016-02-17 03:10:07
【问题描述】:

我正在尝试将人口普查局的批量地理编码器 (http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf) 与 R 一起使用。输入地址位于数据帧中,而不是 CSV。由于地址是一个中间步骤,我不想将它们写入 CSV。

我已经阅读了几篇关于 stackoverflow 的帖子。 Hadley 的解决方案 (Posting to and Receiving data from API using httr in R) 说明了如何上传现有的 CSV 文件。 MrFlick 的解决方案 (Uploading a csv to an api in R) 似乎接近我想要的,但使用的是字符串,而不是数据框。

这是我的代码方式:

#generate data frame of test addresses for this example
a = c(1, 2, 3) 
b = c("125 Worth Street", "258 Broadway", "8 Centre Street") 
c = rep("New York", 3) 
d = rep("NY", 3)
e = c("10013","10007","10007")
addresses = data.frame(a,b,c,d,e)

#names specified by API documentation
colnames(addresses) <- c("Unique ID","Street address","City","State","ZIP")

apiurl <- "http://geocoding.geo.census.gov/geocoder/geographies/addressbatch"

req <- POST(apiurl, body=list(
    addressFile = RCurl::fileUpload(
        filename = "test.csv", 
        contents = addresses
    ), 
    benchmark = "Public_AR_Census2010",
    vintage = "Census2010_Census2010"
    ), 
    encode="multipart"
)
stop_for_status(req)

提前致谢。

【问题讨论】:

  • 有趣...预期的输出是什么?
  • 为什么不能将数据写入临时文件,然后在完成/退出时删除临时文件?
  • 我想在住院记录数据库中使用它来检索人口普查地理区域(区块、区域)。在处理数百万条记录时,我想我会将批量地理编码器的速度与单记录地理编码器的速度(通过矢量化应用)进行比较。

标签: r geocoding httr


【解决方案1】:

如果您愿意将数据写入临时文件...

library("httr")
a = c(1, 2, 3) 
b = c("125 Worth Street", "258 Broadway", "8 Centre Street") 
c = rep("New York", 3) 
d = rep("NY", 3)
e = c("10013","10007","10007")
addresses = data.frame(a,b,c,d,e)
colnames(addresses) <- c("Unique_ID","Street address","City","State","ZIP")
apiurl <- "http://geocoding.geo.census.gov/geocoder/geographies/addressbatch"
file <- tempfile(fileext = ".csv")
write.csv(addresses, file, row.names = FALSE)
req <- POST(apiurl, body=list(
    addressFile = upload_file(file), 
    benchmark = "Public_AR_Census2010",
    vintage = "Census2010_Census2010"
  ), 
  encode="multipart"
)
content(req, "text", encoding = "UTF-8")


#> [1] "\"3\",\"8 Centre Street, New York, NY, 10007\",\"Match\",\"Non_Exact\",\"8 Centre St, NEW YORK, NY, 10013\",\"-74.00442,40.712765\",\"59660429\",\"R\",\"36\",\"061\",\"002900\",\"4019\"\n\"2\",\"258 Broadway, New York, NY, 10007\",\"No_Match\"\n\"1\",\"125 Worth Street, New York, NY, 10013\",\"Match\",\"Exact\",\"125 Worth St, NEW YORK, NY, 10013\",\"-74.0027,40.715446\",\"59660405\",\"L\",\"36\",\"061\",\"003100\",\"1012\"\n\"Unique_ID\",\"Street address, City, State, ZIP\",\"No_Match\"\n"

【讨论】:

  • 可以用unlink删除临时文件
  • 如果这是在一个函数中,你可以这样做on.exit(unlink(file)),这样当函数退出时,它将取消链接该文件
  • 谢谢,sckott...很好的建议!现在我剩下的就是解析输出了。
  • 我今天尝试使用您的相同脚本,但没有成功...我收到"Parameter conditions &amp;quot;form&amp;quot; not met for actual request parameters: " 的错误 花了几个小时试图找到解决方案,但还没有。知道它是什么吗?
  • 我会看一下服务的文档,它的参数可能已经改变了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多