2015-10-26 60 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