首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么HERE API中的routingApi.matrix()方法有时找不到两点之间的开销?

为什么HERE API中的routingApi.matrix()方法有时找不到两点之间的开销?
EN

Stack Overflow用户
提问于 2020-06-12 02:46:04
回答 1查看 151关注 0票数 0

我正在使用Here API和Python (herepy),我在使用routingApi.matrix()方法时遇到了问题,因为多次运行代码会抛出以下错误。特别是,对于同一组起点和终点,有时它会设法创建距离矩阵,但有时它会向我抛出错误。我知道当函数要查找JSON变量的值时,它找不到我所请求的字典。但我不明白为什么在一次迭代中我没有问题,而在另一次迭代中,它给了我这个错误。

distMatrixComp()和distMatrix()函数是没有问题的任意函数

代码语言:javascript
复制
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 value
代码语言:javascript
复制
def 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
代码语言:javascript
复制
{"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}}, 
EN

回答 1

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62331393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档