获取栅格数据基本信息
def GetGeoInfo(FileName):
if exists(FileName) is False:
raise Exception('[Errno 2] No such file or directory: \'' + FileName + '\'')
SourceDS = gdal.Open(FileName, gdal.GA_ReadOnly)
if SourceDS == None:
raise Exception("Unable to read the data file")
NDV = SourceDS.GetRasterBand(1).GetNoDataValue()
xsize = SourceDS.RasterXSize
ysize = SourceDS.RasterYSize
GeoT = SourceDS.GetGeoTransform()
Projection = osr.SpatialReference()
Projection.ImportFromWkt(SourceDS.GetProjectionRef())
DataType = SourceDS.GetRasterBand(1).DataType
DataType = gdal.GetDataTypeName(DataType)
return NDV, xsize, ysize, GeoT, Projection, DataType
转投影
from osgeo import gdal
options = gdal.WarpOptions(format='GTiff', srcSRS='EPSG:4326', dstSRS='EPSG:3857')
gdal.Warp('out.tif', 'ttt.tif', options=options)
裁剪
# clip
gdal.Warp(outras, # 输出栅格
inras, # 输入栅格
format='GTiff',
dstSRS='EPSG:4326',
cutlineDSName=boundaryshp, # shp边界
cropToCutline=True, # 按掩膜图层范围裁剪
outputType=gdal.GDT_Float32)
在内存里创建栅格数据,然后按矩形裁剪并重采样
#在内存里创建TIFF文件,并写入数据
driver = gdal.GetDriverByName("MEM")
# 在内存里生成时,不需要输入导出路径
ds = driver.Create("", lons.shape[0], lats.shape[0], 1, gdal.GDT_Float32)
# 定义坐标系等
ds.SetGeoTransform(im_geotrans)
ds.SetProjection(s)
# 写入数据
ds.GetRasterBand(1).SetNoDataValue(missingvalue)
ds.GetRasterBand(1).WriteArray(dt)
# 按box裁剪,同时进行双线性插值
ds1 = gdal.Warp(oras, # 输出栅格
ds, # 输入栅格
format='GTiff',
dstSRS='EPSG:4326',
outputBounds=[minx,miny,maxx,maxy],
outputType=gdal.GDT_Float32,
xRes=0.5, # 重采样后的x方向的分辨率
yRes=0.5, # 重采样后y方向分辨率
resampleAlg=gdalconst.GRA_Bilinear) # 双线性插值
在内存里warp
# 按照矩形框裁剪,并按照最临近法重采样
outfile = gdal.Warp("", # 输出栅格
ds, # 输入栅格
format='VRT', # 在内存里计算,不导出
outputBounds = [73.5,3.9,134.7,53.5], # 导出范围
xRes=0.1, # 重采样后的x方向分辨率
yRes=0.1, # 重采样后的y方向分辨率
resampleAlg=gdal.GRA_NearestNeighbour) # 最邻近法重采样
# 对上面重采样后的栅格数据二次裁剪
gdal.Warp(otif, # 输出栅格路径
outfile, # 输入栅格
format='GTiff', # 导出tif格式
cutlineDSName=boundaryshp, # shp边界
cropToCutline=True) # 按掩膜图层范围裁剪