谷歌地图返回列表而不是字典

时间:2015-04-20 18:30:15

标签: python google-maps

我对Python很新,所以我希望这个问题不是太愚蠢。 我有几个坐标(纬度和经度),我想使用Google Maps API计算行驶距离和时间。我正在关注http://py-googlemaps.sourceforge.net/

中的代码

目前,我只尝试了一对出发地。这是我的代码:

    import os
    import csv
    from googlemaps import Client

    ## Working directory
    wdir = 'mydir'
    os.chdir(wdir)

    ## Import data
    rowsarray=[]

    with open(os.path.relpath("Data/geocodes.csv"), "rb") as csvfile:
         reader = csv.reader(csvfile, delimiter=",")
         for row in reader:
            rowsarray.append(row)

    ## Google Maps
    gmaps = Client('mykey')        

    origin = float(rowsarray[1][0]),float(rowsarray[1][1])
    destination = float(rowsarray[1][2]),float(rowsarray[1][3])

    dirs = gmaps.directions(origin, destination)
    time = dirs['Directions']['Duration']['seconds']
    distance = dirs['Directions']['Distance']['meters']

我的问题是我无法恢复时间和距离。我得到的错误是:

    Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
    TypeError: list indices must be integers, not str  

我不知道为什么,但对象&#39; dirs&#39;是一个列表,而不是一个字典。我相信我缺少一些非常简单的东西,但我无法弄清楚它是什么。 仅供参考,我相信原点和目的地格式正确,例如:

    origin
    (-23.9592578, -46.3744664)
    destination
    (-23.6605557, -47.2263173)

我感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

此API相当陈旧,您可能更喜欢使用REST API,如下所示:

import json
import urllib

origin = (-30.2664935,-51.8364501)
destination = (-30, -51)

geocode_url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng={[lat]},{[lon]}&sensor=false'
directions_url = 'http://maps.googleapis.com/maps/api/directions/json?sensor=false&origin={}&destination={}'

distance = 0;
duration = 0;

pars = (origin, destination)
request_url = directions_url.format(*pars)
result_string = urllib.urlopen(request_url).read();
result = json.loads(result_string)
if result['status'] == "OK":
    routes = result['routes']
    for route in routes:
        legs = route['legs']
        for leg in legs:
            distance += leg['distance']['value']
            duration += leg['duration']['value']

print distance, duration

答案 1 :(得分:0)

如果您仍想使用googlemaps python模块,请尝试以下操作:

print dirs[0]['Duration']['seconds']

答案 2 :(得分:0)

您的对象目录是一个包含一个项目的列表,这是您寻找的词典。

type(dirs) # returns type 'list'
type(mapresults[0]) # returns type 'dict'
tot_drive_time = dirs[0]['legs'][0]['duration']['value']
tot_distance = dirs[0]['legs'][0]['distance']['value']

仅供参考,模块googlemaps 2.4.2上次更新时间2015-12-03