def generate_lat_raster(cfg): """Generate latitude raster""" dem_file = cfg.spatials.filldem ds = RasterUtilClass.read_raster(dem_file) src_srs = ds.srs if not src_srs.ExportToProj4(): raise ValueError('The source raster %s has not coordinate, ' 'which is required!' % dem_file) dst_srs = osr_SpatialReference() dst_srs.ImportFromEPSG(4326) # WGS84 # dst_wkt = dst_srs.ExportToWkt() transform = osr_CoordinateTransformation(src_srs, dst_srs) point_ll = ogr_CreateGeometryFromWkt('POINT (%f %f)' % (ds.xMin, ds.yMin)) point_ur = ogr_CreateGeometryFromWkt('POINT (%f %f)' % (ds.xMax, ds.yMax)) point_ll.Transform(transform) point_ur.Transform(transform) lower_lat = point_ll.GetY() up_lat = point_ur.GetY() rows = ds.nRows cols = ds.nCols delta_lat = (up_lat - lower_lat) / float(rows) def cal_cell_lat(row, col): """calculate latitude of cell by row number""" return up_lat - (row + 0.5) * delta_lat data_lat = fromfunction(cal_cell_lat, (rows, cols)) data_lat = where(ds.validZone, data_lat, ds.data) RasterUtilClass.write_gtiff_file(cfg.spatials.cell_lat, rows, cols, data_lat, ds.geotrans, ds.srs, ds.noDataValue, GDT_Float32)