Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将坐标转换为NetworkX图形中的标记数组(反之亦然)?_Python_Networkx_Dijkstra_A Star_Geotiff - Fatal编程技术网

Python 如何将坐标转换为NetworkX图形中的标记数组(反之亦然)?

Python 如何将坐标转换为NetworkX图形中的标记数组(反之亦然)?,python,networkx,dijkstra,a-star,geotiff,Python,Networkx,Dijkstra,A Star,Geotiff,我想在NetworkX中使用光栅进行a*和双向Dijkstra路径分析。我正在为这个项目使用Python 光栅示例(上传时转换为png文件,但真正的问题是TIFF): 首先,我用GDAL读取光栅图 input_raster = "raster.tif" raster = gdal.Open(input_raster) 接下来,我以数组的形式读取光栅 bandraster = raster.GetRasterBand(1) arr = bandraster.ReadAsArray() 因此,

我想在NetworkX中使用光栅进行a*和双向Dijkstra路径分析。我正在为这个项目使用Python

光栅示例(上传时转换为png文件,但真正的问题是TIFF):

首先,我用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])
数组如下所示(示例):

接下来,加载图形并调用bi dijkstra函数(但我想从数组[0][0]到数组[1][1]):


如何按数组获取源和目标的节点id?

不知道您正在使用的所有包,很明显您希望
bandraster.ReadAsArray
提供与
coord2pixelOffset
输出相对应的坐标吗?嗨@Joel!这些软件包仅限于GDAL和Networkx。我希望根据坐标获得正确的像素索引,但这并没有发生。我不知道解决这个问题的正确方法。谢谢您是否检查了图形中的节点?(它们绝对是整数元组吗)?嗨@Joel!我检查了一下图像,没问题。我是这样加载图形的:G=nx.from_numpy_matrix(np.array(array)),但是,我不知道如何将节点索引#node 1中的矩阵索引(x,y)转换为节点38长度,path=nx.dijkstra(G,1,38)
# 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
G = nx.from_numpy_matrix(np.array(arr))
length, path = nx.bidirectional_dijkstra(G, source, target)