我正在使用Here API和Python (herepy),我在使用routingApi.matrix()方法时遇到了问题,因为多次运行代码会抛出以下错误。特别是,对于同一组起点和终点,有时它会设法创建距离矩阵,但有时它会向我抛出错误。我知道当函数要查找JSON变量的值时,它找不到我所请求的字典。但我不明白为什么在一次迭代中我没有问题,而在另一次迭代中,它给了我这个错误。
distMatrixComp()和distMatrix()函数是没有问题的任意函数
Start Points: [[-36.62871, -72.07365], [-36.59533, -72.0858], [-36.8972043, -72.028369], [-36.62639, -72.09149], [-36.6089, -72.10252], [-35.96823, -72.33622], [-36.42341, -71.96235], [-36.41848, -71.97017], [-36.61557, -72.11887], [-36.14303, -71.8106], [-36.1414329, -71.827859], [-35.96311, -72.31443], [-36.61005, -72.1025], [-36.61525, -72.07426], [-36.6163286, -72.1227685]]
End Points: [[-36.5874, -72.11869], [-36.56707, -72.07326], [-36.2867395, -72.5440474], [-36.60889, -72.10185], [-36.74158, -72.46435], [-35.9665601, -72.3123652], [-36.60703, -72.10427], [-36.6094, -72.0999], [-36.5874, -72.11869], [-36.61266, -72.10245], [-36.46084, -71.72261], [-35.95813, -72.33583], [-36.60979, -72.14558], [-35.9686549, -72.3149309], [-36.623144, -72.124962]]
Traceback (most recent call last):
File "<ipython-input-27-1bccda51e23d>", line 1, in <module>
runfile('C:/Users/bacheleonb/Dropbox/Python/Project Carterizacion/updateMatrixDistances.py')
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/bacheleonb/Dropbox/Python/Project Carterizacion/updateMatrixDistances.py", line 166, in <module>
matrix = distMatrix(listCoordenadas)
File "C:/Users/bacheleonb/Dropbox/Python/Project Carterizacion/updateMatrixDistances.py", line 96, in distMatrix
solution = distMatrixComp(startPoints, endPoints)
File "C:/Users/bacheleonb/Dropbox/Python/Project Carterizacion/updateMatrixDistances.py", line 27, in distMatrixComp
modes=[herepy.RouteMode.fastest, herepy.RouteMode.car],summary_attributes=["distance"])
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\site-packages\herepy\routing_api.py", line 295, in matrix
response = self.__get(self.URL_CALCULATE_MATRIX, data, RoutingMatrixResponse)
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\site-packages\herepy\routing_api.py", line 40, in __get
json_data = json.loads(response.content.decode('utf8'))
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\bacheleonb\AppData\Local\Continuum\anaconda3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting valuedef distMatrix(listCoordenadas):
# Función Auxiliar
def distMatrixComp(startPoints, endPoints):
response = routingApi.matrix(
start_waypoints=startPoints,
destination_waypoints=endPoints,
departure='2018-07-04T17:00:00+02',
modes=[herepy.RouteMode.fastest, herepy.RouteMode.car],summary_attributes=["distance"])
return response
# Función Auxiliar
def grouped(iterable, n):
return list(zip(*[iter(iterable)]*n))
if len(listCoordenadas) > 15:
restData = len(listCoordenadas)%15
if restData != 0:
restData = tuple(listCoordenadas[-restData:])
nColumnsGroup = len(grouped(listCoordenadas, 15))
columnsMatrix = ["Group %s"%i for i in range(1,nColumnsGroup+1)]
if restData != 0:
columnsMatrix.append("Group %s"%(nColumnsGroup+1))
matrix = pd.DataFrame(columns = columnsMatrix)
for x in grouped(listCoordenadas, 15):
comb = {}
for y, c in zip(grouped(listCoordenadas, 15),
columnsMatrix):
comb[c] = [list(x), list(y)]
if restData != 0:
comb["Group %s"%(nColumnsGroup+1)] = [list(x), list(restData)]
matrix = matrix.append(comb, ignore_index= True)
else:
matrix = matrix.append(comb, ignore_index= True)
if restData != 0:
comb = {}
for x, c in zip(grouped(listCoordenadas,15),
columnsMatrix):
comb[c] = [list(restData), list(x)]
comb["Group %s"%(nColumnsGroup+1)] = [list(restData), list(restData)]
matrix = matrix.append(comb, ignore_index= True)
nRowsMatrix = matrix.shape[0]
nColumnsMatrix = matrix.shape[1]
print(matrix)
finalDistanceMatrix = [[0 for i in range(nRowsMatrix)] for j in range(nColumnsMatrix)]
for i in range(nRowsMatrix):
for j in range(nColumnsMatrix):
startPoints = matrix.iloc[i,j][0]
endPoints = matrix.iloc[i,j][1]
print("nRow: ", i)
print("nCol: ", j)
print("Start Points: ", startPoints)
print("End Points: ", endPoints, "\n")
solution = distMatrixComp(startPoints, endPoints)
#print(solution)
tempDistMatrix = [[0 for i in range(len(endPoints))] for j in range(len(startPoints))]
for k in solution.response["matrixEntry"]:
tempDistMatrix[k["startIndex"]][k["destinationIndex"]] = k["summary"]["distance"]
finalDistanceMatrix[i][j] = tempDistMatrix
distanceMatrix = np.zeros((len(listCoordenadas), len(listCoordenadas)))
indiceX = 0
indiceY = 0
for i in finalDistanceMatrix:
for j in i:
tempX = 0
for k in range(len(j)):
tempY = 0
for l in j[k]:
distanceMatrix[indiceX+tempX,indiceY+tempY] = l
tempY += 1
tempX += 1
indiceY += len(j[0])
indiceY = 0
indiceX += len(j)
else:
distanceMatrix = np.zeros((len(listCoordenadas), len(listCoordenadas)))
solution = distMatrixComp(listCoordenadas, listCoordenadas)
for i in solution.response["matrixEntry"]:
distanceMatrix[i["startIndex"]][i["destinationIndex"]] = i["summary"]["distance"]
matrixRaw = distanceMatrix
matrix = pd.DataFrame(matrixRaw)
#matrix = (matrix-matrix.min())/(matrix.max()-matrix.min())
return matrix{"response": {"matrixEntry": [{"destinationIndex": 0, "startIndex": 0, "summary": {"costFactor": 2390, "distance": 33519}},
{"destinationIndex": 1, "startIndex": 0, "summary": {"costFactor": 346, "distance": 1916}},
{"destinationIndex": 2, "startIndex": 0, "summary": {"costFactor": 2259, "distance": 32941}},
{"destinationIndex": 3, "startIndex": 0, "summary": {"costFactor": 2090, "distance": 27661}},
{"destinationIndex": 4, "startIndex": 0, "status": "failed"},
{"destinationIndex": 5, "startIndex": 0, "summary": {"costFactor": 4485, "distance": 78916}},
{"destinationIndex": 6, "startIndex": 0, "summary": {"costFactor": 5751, "distance": 111151}},
{"destinationIndex": 3, "startIndex": 1, "summary": {"costFactor": 873, "distance": 6165}},
{"destinationIndex": 4, "startIndex": 1, "status": "failed"},
{"destinationIndex": 5, "startIndex": 1, "summary": {"costFactor": 2724, "distance": 43621}},
{"destinationIndex": 6, "startIndex": 1, "summary": {"costFactor": 4168, "distance": 80086}},
{"destinationIndex": 2, "startIndex": 2, "summary": {"costFactor": 3198, "distance": 62491}},
{"destinationIndex": 3, "startIndex": 2, "summary": {"costFactor": 3518, "distance": 69691}},
{"destinationIndex": 4, "startIndex": 2, "status": "failed"},
{"destinationIndex": 5, "startIndex": 2, "summary": {"costFactor": 4952, "distance": 100113}},
{"destinationIndex": 6, "startIndex": 2, "summary": {"costFactor": 941, "distance": 10104}},
{"destinationIndex": 7, "startIndex": 2, "summary": {"costFactor": 795, "distance": 8373}}, 发布于 2020-08-04 11:12:42
你是正确的。开始路点“定义矩阵中路线的起始点的路点列表。M:N请求中的开始数限制为15。”15 *15应该可以工作,但herepy不在这里,所以不能确切地说出问题是什么。看起来问题是由于目的地的传播而导致的超时。
您是否可以尝试使用少于15个节点,或者您可以尝试直接使用路由API https://developer.here.com/documentation/routing/dev_guide/topics/example-matrix-use-post-method.html
https://stackoverflow.com/questions/62331393
复制相似问题