使用循环查询立交api
问题描述:
我有一个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。
任何帮助将不胜感激!
答
有几个这种错误的这里主要用你的方法:
-
coords = [df['coord'][0:10]]
不是必需的。你可以用一个简单的替换df['coord'].tolist()
- 你正在初始化
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)
请注意,如果你得到一个错误与请求,请提供您的问题,一个完整的回溯。这将帮助我们缩小错误的真正原因。
我们可以看到一些输入数据吗?和期望的输出?我们中有些人可能不熟悉立交桥模块,但可以帮助构建您的数据。 – Parfait
谢谢! 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”} –
@JuliaDills,请编辑您的问题与数据。为此目的发表评论。 – Kartik