[英]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.