2016-08-09 82 views
0

我有一個csv文件的邊界框,我使用python加載使用熊貓。數據幀爲df,列名爲coord。有誰知道我怎麼可以創建一個循環,將列表傳遞給我的立交api查詢?使用循環查詢立交api

我嘗試這樣做:

import time 
import overpass 
api = overpass.API(timeout=900) 

coords = [df['coord'][0:10]] 
for coord in coords: 
    results =[] 
    params =[] 
    params = 'node["power"="generator"]'+coord+';out skel;' 
    results = api.Get(params, responseformat="json") 
    time.sleep(5.0) 

但是,我得到了多個請求錯誤。

我也試過:

x={} 
x = (api.Get(param) for param in params) 

但是,返回一個Python對象(<generator object <genexpr> at 0x11755c0f8>),我需要的數據爲JSON。

任何幫助將不勝感激!

+0

我們可以看到一些輸入數據嗎?和期望的輸出?我們中有些人可能不熟悉立交橋模塊,但可以幫助構建您的數據。 – Parfait

+0

謝謝! bbox的座標列表如下: [(-30,170,-20,180),(-40,110,-30,120),( - 10,0,0,10),(30, (0,70,10,80),(10,120,20,130),( - 30,130,-20,140),(40,20,50,30),(70 (60,80,70),(30,-160,40,-150)] 輸出爲嵌套字典: {「features」:[{「geometry」:{「coordinates」:[116.261146, - 33.3416006],「type」:「Point」},「id」:293906560,「properties」:{},「type」:「Feature」} –

+1

@JuliaDills,請編輯您的問題與數據。爲此目的發表評論。 – Kartik

回答

0

有幾個這種錯誤的這裏主要用你的方法:

  1. coords = [df['coord'][0:10]]不是必需的。你可以用一個簡單的替換df['coord'].tolist()
  2. 你正在初始化params一個空的列表,然後緊接着一個字符串,爲什麼?
  3. 您的字符串爲params是什麼導致您的困難。我將使用Python字符串的format方法來在查詢中計算座標。這樣做更安全,因爲它本身處理類型轉換和正確放置。你不能簡單地將一個座標元組添加到一個字符串,並期望它能夠工作。嘗試在您的代碼中打印您分配params的字符串,並在下面的解決方案中打印相同的行,您將看到不同之處。你的代碼會引發錯誤TypeError: Can't convert 'tuple' object to str implicitly,這是我的錯誤。

這裏是一個完整的解決方案:

import time 
import overpass 
api = overpass.API(timeout=900) 

for coord in df['coord'].tolist(): 
    params = 'node["power"="generator"]{c};out skel;'.format(c=coord) 
    results = api.Get(params, responseformat="json") 
    time.sleep(5.0) 

請注意,如果你得到一個錯誤與請求,請提供您的問題,一個完整的回溯。這將幫助我們縮小錯誤的真正原因。