import gdal, osr from skimage.graph import route_through_array import numpy as np def raster2array(rasterfn): raster = gdal.Open(rasterfn) band = raster.GetRasterBand(1) array = band.ReadAsArray() return array 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 def createPath(CostSurfacefn,costSurfaceArray,startCoord,stopCoord): # coordinates to array index startCoordX = startCoord[0] startCoordY = startCoord[1] startIndexX,startIndexY = coord2pixelOffset(CostSurfacefn,startCoordX,startCoordY) stopCoordX = stopCoord[0] stopCoordY = stopCoord[1] stopIndexX,stopIndexY = coord2pixelOffset(CostSurfacefn,stopCoordX,stopCoordY) # create path indices, weight = route_through_array(costSurfaceArray, (startIndexY,startIndexX), (stopIndexY,stopIndexX),geometric=True,fully_connected=True) indices = np.array(indices).T path = np.zeros_like(costSurfaceArray) path[indices[0], indices[1]] = 1 return path def array2raster(newRasterfn,rasterfn,array): raster = gdal.Open(rasterfn) geotransform = raster.GetGeoTransform() originX = geotransform[0] originY = geotransform[3] pixelWidth = geotransform[1] pixelHeight = geotransform[5] cols = array.shape[1] rows = array.shape[0] driver = gdal.GetDriverByName('GTiff') outRaster = driver.Create(newRasterfn, cols, rows, 1, gdal.GDT_Byte) outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight)) outband = outRaster.GetRasterBand(1) outband.WriteArray(array) outRasterSRS = osr.SpatialReference() outRasterSRS.ImportFromWkt(raster.GetProjectionRef()) outRaster.SetProjection(outRasterSRS.ExportToWkt()) outband.FlushCache() def main(CostSurfacefn,outputPathfn,startCoord,stopCoord): costSurfaceArray = raster2array(CostSurfacefn) # creates array from cost surface raster pathArray = createPath(CostSurfacefn,costSurfaceArray,startCoord,stopCoord) # creates path array array2raster(outputPathfn,CostSurfacefn,pathArray) # converts path array to raster if __name__ == "__main__": CostSurfacefn = 'CostSurface.tif' startCoord = (345387.871,1267855.277) stopCoord = (345479.425,1267799.626) outputPathfn = 'Path.tif' main(CostSurfacefn,outputPathfn,startCoord,stopCoord)
此方法创建一个最小成本路径之间的基础上的栅格成本面坐标。在下面的例子中,一个成本路径点1点和2点之间创建的基础上的斜坡光栅。
关注公众号
获取免费资源
Copyright © Since 2014.
开源地理空间基金会中文分会
吉ICP备05002032号
Powered by TorCMS