¿Convertir ráster (matriz) a un gráfico de NetworkX y hacer * búsqueda? [cerrado]

14

Quiero usar un raster de pendiente para un un análisis de ruta de estrella en NetworkX . Estoy usando Python para este proyecto.

Mi ráster de prueba tiene este aspecto

PrimeroleoenlatramaconGDAL

input_raster="slope5.tif"
raster = gdal.Open(input_raster)

A continuación leo el ráster como una matriz

bandraster = raster.GetRasterBand(1)
arr = bandraster.ReadAsArray()

La matriz tiene este aspecto

>>> arr
array([[ 15.26072407,  16.01073837,  27.81685448,  24.49266815,
         32.94010162],
       [ 26.0834446 ,  21.01086426,  30.02531815,  25.44641304,
         19.48436928],
       [ 21.98579979,  19.06574059,  24.44838905,  26.67520905,
         26.61030769],
       [ 20.42549133,  28.58900261,  17.00629425,  31.25236893,
         32.34066772],
       [  8.33120537,  24.303339  ,   7.85025167,  35.50911713,
         29.56856346]], dtype=float32)

Luego creo desde la matriz un gráfico

G = nx.DiGraph(arr)

Por lo que tengo entendido, mi gráfico tiene este aspecto

(0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
(3,0) (3,1) (3,2) (3,3) (3,4)
(4,0) (4,1) (4,2) (4,3) (4,4)

Por ejemplo, el peso de G[3][2] es {'weight': 17.00629425048828}

¿Cómo puedo encontrar el camino de la estrella A?

Intenté lo siguiente para encontrar el camino desde (1,0) a (3,3) ?

nx.astar_path(G,(1,0),(3,3))

Pero eso solo dio

Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    nx.astar_path(G,(1,4),(4, 2))
  File "C:\Python27\lib\site-packages\networkx\algorithms\shortest_paths\astar.py", line 108, in astar_path
    for neighbor, w in G[curnode].items():
  File "C:\Python27\lib\site-packages\networkx\classes\graph.py", line 319, in __getitem__
    return self.adj[n]
KeyError: (1, 4)

Mis nodos y bordes se ven así:

>>> G.nodes()
[0, 1, 2, 3, 4]
>>> G.edges()
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
  1. ¿Es este el enfoque correcto?
  2. ¿Cómo puedo encontrar la ruta?
  3. ¿Mezclé algo con nodos y aristas?
pregunta ustroetz 03.10.2013 - 20:12

0 respuestas

Lea otras preguntas en las etiquetas