我们从Python开源项目中,提取了以下9个代码示例,用于说明如何使用osgeo.gdal.GDT_Byte()。
def createRasterFromGeoJson(srcGeoJson, srcRasterFileName, outRasterFileName): NoData_value = 0 source_ds = ogr.Open(srcGeoJson) source_layer = source_ds.GetLayer() srcRaster = gdal.Open(srcRasterFileName) # Create the destination data source target_ds = gdal.GetDriverByName('GTiff').Create(outRasterFileName, srcRaster.RasterXSize, srcRaster.RasterYSize, 1, gdal.GDT_Byte) target_ds.SetGeoTransform(srcRaster.GetGeoTransform()) target_ds.SetProjection(srcRaster.GetProjection()) band = target_ds.GetRasterBand(1) band.SetNoDataValue(NoData_value) # Rasterize gdal.RasterizeLayer(target_ds, [1], source_layer, burn_values=[1]) band.FlushCache()
def rasterize(self,inRaster,inShape,inField): filename = tempfile.mktemp('.tif') data = gdal.Open(inRaster,gdal.GA_ReadOnly) shp = ogr.Open(inShape) lyr = shp.GetLayer() driver = gdal.GetDriverByName('GTiff') dst_ds = driver.Create(filename,data.RasterXSize,data.RasterYSize, 1,gdal.GDT_Byte) dst_ds.SetGeoTransform(data.GetGeoTransform()) dst_ds.SetProjection(data.GetProjection()) OPTIONS = 'ATTRIBUTE='+inField gdal.RasterizeLayer(dst_ds, [1], lyr, None,options=[OPTIONS]) data,dst_ds,shp,lyr=None,None,None,None return filename
def createImageDS(filename, x_min, y_min, x_max, y_max, pixel_size, srs=None): # Create the destination data source x_res = int((x_max - x_min) / pixel_size) # resolution y_res = int((y_max - y_min) / pixel_size) # resolution ds = gdal.GetDriverByName('GTiff').Create(filename, x_res, y_res, 1, gdal.GDT_Byte) ds.SetGeoTransform(( x_min, pixel_size, 0, y_max, 0, -pixel_size, )) if srs: # Make the target raster have the same projection as the source ds.SetProjection(srs.ExportToWkt()) else: # Source has no projection (needs GDAL >= 1.7.0 to work) ds.SetProjection('LOCAL_CS["arbitrary"]') # Set nodata band = ds.GetRasterBand(1) band.SetNoDataValue(0) return ds
def create_gpkg( gpkg_name, proj_string, size=(1, 1), geotransform=[0, 1, 0, 0, 0, -1], creation_options=None ): if os.path.exists("%s.gpkg" % gpkg_name): sys.stderr.write( "ERROR: SQLite GeoPackage '%s.gpkg' already exists.\n" % gpkg_name ) sys.exit(1) gdal.AllRegister() drv = gdal.GetDriverByName("GPKG") try: gpkg = drv.Create( "%s.gpkg" % gpkg_name, size[0], size[1], 1, gdal.GDT_Byte, creation_options ) proj = osr.SpatialReference() res = proj.SetWellKnownGeogCS(proj_string) if res != 0: if proj_string[0:4] == 'EPSG': proj.ImportFromEPSG(int(proj_string[5:])) gpkg.SetProjection(proj.ExportToWkt()) gpkg.SetGeoTransform(geotransform) gpkg = None except Exception as e: sys.stderr.write( "ERROR: Cannot create SQLite GeoPackage '%s.gpkg'. " "Error message was: '%s'.\n" % (gpkg_name, e.message) ) sys.exit(1)
def write_geotiff(fname, data, geo_transform, projection, data_type=gdal.GDT_Byte): """ Create a GeoTIFF file with the given data. :param fname: Path to a directory with shapefiles :param data: Number of rows of the result :param geo_transform: Returned value of gdal.Dataset.GetGeoTransform (coefficients for transforming between pixel/line (P,L) raster space, and projection coordinates (Xp,Yp) space. :param projection: Projection definition string (Returned by gdal.Dataset.GetProjectionRef) """ driver = gdal.GetDriverByName('GTiff') rows, cols = data.shape dataset = driver.Create(fname, cols, rows, 1, data_type) dataset.SetGeoTransform(geo_transform) dataset.SetProjection(projection) band = dataset.GetRasterBand(1) band.WriteArray(data) ct = gdal.ColorTable() for pixel_value in range(len(classes)+1): color_hex = COLORS[pixel_value] r = int(color_hex[1:3], 16) g = int(color_hex[3:5], 16) b = int(color_hex[5:7], 16) ct.SetColorEntry(pixel_value, (r, g, b, 255)) band.SetColorTable(ct) metadata = { 'TIFFTAG_COPYRIGHT': 'CC BY 4.0', 'TIFFTAG_DOCUMENTNAME': 'classification', 'TIFFTAG_IMAGEDESCRIPTION': 'Supervised classification.', 'TIFFTAG_MAXSAMPLEVALUE': str(len(classes)), 'TIFFTAG_MINSAMPLEVALUE': '0', 'TIFFTAG_SOFTWARE': 'Python, GDAL, scikit-learn' } dataset.SetMetadata(metadata) dataset = None # Close the file return
def create_raster(xsize, ysize, driver='MEM',tmpfile='', gt=None, srs_wkt=None, nodata=None, init=None, datatype=gdal.GDT_Byte): # Create a memory raster to rasterize into. out_ds = gdal.GetDriverByName(driver).Create(tmpfile, xsize, ysize, 1 ,datatype) if init is not None:out_ds.GetRasterBand(1).Fill(init) if nodata is not None:out_ds.GetRasterBand(1).SetNoDataValue(nodata) if gt:out_ds.SetGeoTransform(gt) if srs_wkt:out_ds.SetProjection(srs_wkt) return out_ds
def shp2array(shp_fn, r_ds=None, res=None, extent=None, t_srs=None): """Rasterize input shapefile to match existing raster Dataset (or specified res/extent/t_srs) """ shp_ds = ogr.Open(shp_fn) lyr = shp_ds.GetLayer() #This returns xmin, ymin, xmax, ymax shp_extent = lyr_extent(lyr) shp_srs = lyr.GetSpatialRef() # dst_dt = gdal.GDT_Byte ndv = 0 if r_ds is not None: r_extent = ds_extent(r_ds) res = get_res(r_ds, square=True)[0] if extent is None: extent = r_extent r_srs = get_ds_srs(r_ds) r_geom = ds_geom(r_ds) # dst_ns = r_ds.RasterXSize # dst_nl = r_ds.RasterYSize #Convert raster extent to shp_srs cT = osr.CoordinateTransformation(r_srs, shp_srs) r_geom_reproj = geom_dup(r_geom) r_geom_reproj.Transform(cT) r_geom_reproj.AssignSpatialReference(t_srs) lyr.SetSpatialFilter(r_geom_reproj) #lyr.SetSpatialFilter(ogr.CreateGeometryFromWkt(wkt)) else: #TODO: clean this up if res is None: sys.exit("Must specify input res") if extent is None: print("Using input shp extent") extent = shp_extent if t_srs is None: t_srs = r_srs if not shp_srs.IsSame(t_srs): print("Input shp srs: %s" % shp_srs.ExportToProj4()) print("Specified output srs: %s" % t_srs.ExportToProj4()) out_ds = lyr_proj(lyr, t_srs) outlyr = out_ds.GetLayer() else: outlyr = lyr #outlyr.SetSpatialFilter(r_geom) m_ds = mem_ds(res, extent, srs=t_srs, dtype=gdal.GDT_Byte) b = m_ds.GetRasterBand(1) b.SetNoDataValue(ndv) gdal.RasterizeLayer(m_ds, [1], outlyr, burn_values=[1]) a = b.ReadAsArray() a = ~(a.astype('Bool')) return a
def open_data(filename): ''' The function open and load the image given its name. The type of the data is checked from the file and the scipy array is initialized accordingly. Input: filename: the name of the file Output: im: the data cube GeoTransform: the geotransform information Projection: the projection information ''' data = gdal.Open(filename,gdal.GA_ReadOnly) if data is None: print 'Impossible to open '+filename exit() nc = data.RasterXSize nl = data.RasterYSize d = data.RasterCount # Get the type of the data gdal_dt = data.GetRasterBand(1).DataType if gdal_dt == gdal.GDT_Byte: dt = 'uint8' elif gdal_dt == gdal.GDT_Int16: dt = 'int16' elif gdal_dt == gdal.GDT_UInt16: dt = 'uint16' elif gdal_dt == gdal.GDT_Int32: dt = 'int32' elif gdal_dt == gdal.GDT_UInt32: dt = 'uint32' elif gdal_dt == gdal.GDT_Float32: dt = 'float32' elif gdal_dt == gdal.GDT_Float64: dt = 'float64' elif gdal_dt == gdal.GDT_CInt16 or gdal_dt == gdal.GDT_CInt32 or gdal_dt == gdal.GDT_CFloat32 or gdal_dt == gdal.GDT_CFloat64 : dt = 'complex64' else: print 'Data type unkown' exit() # Initialize the array if d == 1: im = sp.empty((nl,nc),dtype=dt) else: im = sp.empty((nl,nc,d),dtype=dt) if d == 1: im[:,:]=data.GetRasterBand(1).ReadAsArray() else : for i in range(d): im[:,:,i]=data.GetRasterBand(i+1).ReadAsArray() GeoTransform = data.GetGeoTransform() Projection = data.GetProjection() data = None return im,GeoTransform,Projection
def write_data(outname,im,GeoTransform,Projection): ''' The function write the image on the hard drive. Input: outname: the name of the file to be written im: the image cube GeoTransform: the geotransform information Projection: the projection information Output: Nothing -- ''' nl = im.shape[0] nc = im.shape[1] if im.ndim == 2: d=1 else: d = im.shape[2] driver = gdal.GetDriverByName('GTiff') dt = im.dtype.name # Get the data type if dt == 'bool' or dt == 'uint8': gdal_dt=gdal.GDT_Byte elif dt == 'int8' or dt == 'int16': gdal_dt=gdal.GDT_Int16 elif dt == 'uint16': gdal_dt=gdal.GDT_UInt16 elif dt == 'int32': gdal_dt=gdal.GDT_Int32 elif dt == 'uint32': gdal_dt=gdal.GDT_UInt32 elif dt == 'int64' or dt == 'uint64' or dt == 'float16' or dt == 'float32': gdal_dt=gdal.GDT_Float32 elif dt == 'float64': gdal_dt=gdal.GDT_Float64 elif dt == 'complex64': gdal_dt=gdal.GDT_CFloat64 else: print 'Data type non-suported' exit() dst_ds = driver.Create(outname,nc,nl, d, gdal_dt) dst_ds.SetGeoTransform(GeoTransform) dst_ds.SetProjection(Projection) if d==1: out = dst_ds.GetRasterBand(1) out.WriteArray(im) out.FlushCache() else: for i in range(d): out = dst_ds.GetRasterBand(i+1) out.WriteArray(im[:,:,i]) out.FlushCache() dst_ds = None