Python GDAL获取坐标系,转投影,重采样

 获取栅格数据基本信息

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)  # 按掩膜图层范围裁剪

你可能感兴趣的:(python,python)