我对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)
我感谢任何帮助!
答案 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