繁体   English   中英

使用循环查询天桥api

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

任何帮助将非常感激!

这主要是您的方法导致的一些错误:

  1. coords = [df['coord'][0:10]]不是必需的。 您可以将其替换为更简单的df['coord'].tolist()
  2. 您要使用空列表初始化params ,然后使用字符串初始化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)

请注意,如果您在请求中遇到错误,请在问题中提供完整的追溯。 这将帮助我们缩小错误的真正原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM