2015-10-26 85 views
0

我尝试对法语地址进行地理编码。我想使用以下网站:http://adresse.data.gouv.fr/带R的API请求

在这个网站上有一个关于如何工作API的例子,但我认为这是一些Linux代码,我想在R代码中进行翻译。目的是给一个带有地址的csv文件,结果应该是地理坐标。

Linux的代码(例如给网站)

http --timeout 600 -f POST http://api-adresse.data.gouv.fr/search/csv/ [email protected]/to/file.csv 

我试图“翻译”这个R中使用下面的代码

library(httr) 
library(RCurl) 
queryResults=POST("http://api-adresse.data.gouv.fr/search/csv/",body=list(data=fileUpload("file.csv"))) 
result_geocodage=content(queryResults) 

但不幸的是我有一个坏请求错误。

有人知道我在翻译到R时丢失了什么吗?

谢谢!

+0

好的谢谢你,我修改我的问题! – Vivien

+0

我现在看到。该网站的API使用Python的[httpie](https://pypi.python.org/pypi/httpie)软件包,一个命令行http客户端。您将需要获取发布数据。试试RCurl的[postForm()](http://www.omegahat.org/RCurl/installed/RCurl/html/postForm.html)。 URI ='http:// api-adresse.data.gouv.fr/search/csv /'和参数,'data =“path/to/file.csv”'。 – Parfait

回答

3

下面是一个例子。首先,一些示例数据加上一个请求:

library(httr) 
df <- data.frame(c("13 Boulevard Chanzy", "Gloucester St"), 
       c("93100 Montreuil", "Jersey")) 
write.csv2(df, tf <- tempfile(fileext = ".csv")) 
res <- POST("http://api-adresse.data.gouv.fr/search/csv/", 
      timeout(600), 
      body = list(data = upload_file(tf))) 

然后,结果是:

content(res, sep = ";", row.names = 1) 
# c..13.Boulevard.Chanzy....Gloucester.St.. c..93100.Montreuil....Jersey.. latitude longitude 
# 1      13 Boulevard Chanzy    93100 Montreuil 48.85825 2.434462 
# 2        Gloucester St       Jersey 49.46712 1.145554 
# result_label result_score result_type    result_id result_housenumber 
# 1    13 Boulevard Chanzy 93100 Montreuil   0.88 housenumber ADRNIVX_0000000268334929     13 
# 2 2 Résidence le Jersey 76160 Saint-Martin-du-Vivier   0.24 housenumber ADRNIVX_0000000311480901     2 
# result_name result_street result_postcode   result_city      result_context result_citycode 
# 1 Boulevard Chanzy   NA   93100    Montreuil 93, Seine-Saint-Denis, Île-de-France   93048 
# 2 Résidence le Jersey   NA   76160 Saint-Martin-du-Vivier 76, Seine-Maritime, Haute-Normandie   76617 

或者,只是坐标:

subset(content(res, sep = ";", row.names = 1, check.names = FALSE), select = c("latitude", "longitude")) 
# latitude longitude 
# 1 48.85825 2.434462 
# 2 49.46712 1.145554 
+0

非常感谢,非常完美! – Vivien