使用循环查询立交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。

任何帮助将不胜感激!

+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

有几个这种错误的这里主要用你的方法:

  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) 

请注意,如果你得到一个错误与请求,请提供您的问题,一个完整的回溯。这将帮助我们缩小错误的真正原因。