[英]use loop to query overpass api
我有一個邊框的csv文件,該文件是我在python中使用熊貓加載的。 數據幀為df ,列名稱為coord 。 有誰知道我如何創建一個循環來將列表傳遞到我的立交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。
任何幫助將非常感激!
這主要是您的方法導致的一些錯誤:
coords = [df['coord'][0:10]]
不是必需的。 您可以將其替換為更簡單的df['coord'].tolist()
params
,然后使用字符串初始化params
,這是為什么? 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)
請注意,如果您在請求中遇到錯誤,請在問題中提供完整的追溯。 這將幫助我們縮小錯誤的真正原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.