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