Как преобразовать координаты в массив индексов (наоборот) в графе NetworkX?

Я хочу использовать растр для A* и двунаправленного анализа пути Дейкстры в NetworkX. Я использую Python для этого проекта.

Растровый пример (это png-файл, конвертируемый при загрузке, но реальная проблема - TIFF): https://stackru.com/images/05d4976cbf5009a7fc97fee673aa751350d6642d.png

Сначала я прочитал в растре с GDAL

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

Далее я читаю растр как массив

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

Итак, я преобразую координаты с помощью функции:

def coord2pixelOffset(rasterfn, x, y):
    raster = gdal.Open(rasterfn)
    geotransform = raster.GetGeoTransform()
    originX = geotransform[0]
    originY = geotransform[3]
    pixelWidth = geotransform[1]
    pixelHeight = geotransform[5]
    xOffset = int((x - originX)/pixelWidth)
    yOffset = int((y - originY)/pixelHeight)
    return xOffset, yOffset

CostSurfacefn = 'raster.tif'
source_coord = (-41.1823753163, -13.83393276)
target_coord = (-40.3726182077, -14.2361991946)

# coordinates to array index
source = coord2pixelOffset(CostSurfacefn, source_coord[0], source_coord[1])
target = coord2pixelOffset(CostSurfacefn, target_coord[0], target_coord[1])

Массив выглядит так (пример):

# Grid with 2x2. The float numbers are the pixel values 
[[  1.83781120e+08   1.90789248e+08]
[  1.83781120e+08   1.90789248e+08]]

# array[0][0] is 1.83781120e+08
# array[0][1] is 1.90789248e+08
# array[1][0] is 1.83781120e+08
# array[1][1] is 1.90789248e+08

Затем график загружается и вызывается функция bi-dijkstra (но я хочу, например, из массива [0][0] в массив [1][1]):

G = nx.from_numpy_matrix(np.array(arr))
length, path = nx.bidirectional_dijkstra(G, source, target)

Как получить идентификатор узла источника и цели по массиву?

0 ответов

Другие вопросы по тегам