TypeError:' QgsGraph' object不支持索引

时间:2014-05-25 09:54:35

标签: python algorithm a-star

Traceback (most recent call last):
  File "/home/kasun/.qgis2/python/plugins/floogin/floogin.py", line 246, in findRoutes
    path=self.astar.astarSearch(graph, start, end)
  File "/home/kasun/.qgis2/python/plugins/floogin/astar.py", line 110, in astarSearch
    for tile in graph[current]:
TypeError: 'QgsGraph' object does not support indexing
运行以下代码时出现

以上错误。我是qgis的新手,我不知道为什么会出现错误。我想找到两个选定点之间的路径。如果你能帮我解决问题,我真的很感激。 谢谢。

def astarSearch(self, graph, current, end):
    openSet = set()
    openHeap = []
    closedSet = set()

    def retracePath(c):
        path = [c]
        while c.parent is not None:
                c = c.parent
                path.append(c)
        path.reverse()
        return path

    openSet.add(current)
    openHeap.append((0,current))
    while openSet:
        current = heapq.heappop(openHeap)[1]
        if current == end:
                return retracePath(current)
        openSet.remove(current)
        closedSet.add(current)
        for tile in graph[current]:
                if tile not in closedSet:
                    tile.H = (abs(end.x-tile.x)+abs(end.y-tile.y))*10 
                    if tile not in openSet:
                            openSet.add(tile)
                            heapq.heappush(openHeap, (tile.H,tile))
                    tile.parent = current
    return []


def findRoutes(self):
vl=self.canvas.currentLayer()
director = QgsLineVectorLayerDirector( vl, -1, '', '', '', 3 )
properter = QgsDistanceArcProperter()
director.addProperter( properter )
crs = self.canvas.mapRenderer().destinationCrs()
builder = QgsGraphBuilder( crs )

global x1
global y1
global x2
global y2
pStart = QgsPoint( x1, y1 )
pStop = QgsPoint( x2, y2 )

tiedPoints = director.makeGraph( builder, [ pStart, pStop ] )
graph = builder.graph()
tStart = tiedPoints[ 0 ]
tStop = tiedPoints[ 1 ]
idStart = graph.findVertex( tStart )
idStop = graph.findVertex( tStop )

start, end = idStart, idStop
path=self.astarSearch(graph, start, end)
if path is None:
        print "No path found"
else:
    print "Path found:", path

0 个答案:

没有答案