这是通过Google API传递所有位置的方法吗?

时间:2019-06-14 23:45:57

标签: python python-3.x google-api google-api-python-client google-distancematrix-api

因此,我开发了一个代码,在其中读取具有某些位置的文件(准确地说是15个),其中第一个是仓库,其他14个位置是公共汽车需要经过以收集病人的位置。为了做到这一点,我使用Google Maps API密钥来收集真实距离并将其最后写入.txt文件中。

import pandas as pd
import googlemaps
from itertools import tee
import numpy as np

#Read CSV file into data frame named 'df'
#change seperator (sep e.g. ',') type if necessary
df = pd.read_csv("D:/Utilizadores/Documents/FEUP/2018-2019/1º Semestre/PDI/Relatório/locais2.txt", sep='\\t',
                       engine='python', skiprows=[0], names=["address", "latitude", "longitude"])

lat = np.expand_dims(np.array(df["latitude"]), 1)
lon = np.expand_dims(np.array(df["longitude"]), 1)
coordinates = np.concatenate((lat, lon), axis=1)

coordinates = list(coordinates)
coordinates = [list(coor) for coor in coordinates]


#Perform request to use the Google Maps API web service
#API_key = 'AIzaSyCi8DDz_CCiVwW2JtvT6i-XpJYiEwxFryI'
API_key = 'AIzaSyCpumDcRbbteV64xlGOUQ5_Bah8Ja5gdJ4'
gmaps = googlemaps.Client(key=API_key)

result = gmaps.distance_matrix(coordinates, coordinates, mode='driving')["rows"]
distance_matrix = np.zeros((len(result), len(result)))

for i in range(len(result)):
    for j in range(len(result)):
        distance_matrix[i, j] = result[i]["elements"][j]["distance"]["value"]

np.savetxt("D:/Utilizadores/Documents/FEUP/2018-2019/1º Semestre/PDI/Relatório/locais_output.txt", distance_matrix, delimiter=",", fmt='%d')
print(distance_matrix)

我想要的距离是从一个地方到每个地方,所以我想要的结果是一个15x15的矩阵,其中对角线用0填充。但它一直显示此错误:

"googlemaps.exceptions.ApiError: MAX_ELEMENTS_EXCEEDED".

唯一没有错误的方法是限制文件的10个位置(包括软件仓库)的读取:

result = gmaps.distance_matrix(coordinates[0:10], coordinates[0:10], mode='driving')["rows"]

我知道发生这种情况是因为Google API一次只能读取100个元素,因此10x10 = 100,这就是为什么它能够读取10个位置的原因。我的问题是,是否有人可以通过某种周期来帮助我解决此问题?因此,Google API每次都会发出一个请求,因此它可以读取所有15个位置。

0 个答案:

没有答案