Python 如何将坐标转换为NetworkX图形中的标记数组(反之亦然)?
我想在NetworkX中使用光栅进行a*和双向Dijkstra路径分析。我正在为这个项目使用Python 光栅示例(上传时转换为png文件,但真正的问题是TIFF): 首先,我用GDAL读取光栅图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() 因此,
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)