830def wkblify_raster_level(options, ds, level, band_range, infile, i):
831 assert ds is not None
832 assert level >= 1
833 assert len(band_range) == 2
834
835 band_from = band_range[0]
836 band_to = band_range[1]
837
838
839 raster_size = ( ds.RasterXSize, ds.RasterYSize )
840 if options.block_size is not None:
841 block_size = parse_block_size(options)
842 read_block_size = ( block_size[0] * level, block_size[1] * level)
843 grid_size = calculate_grid_size(raster_size, read_block_size)
844 else:
845 block_size = raster_size
846 read_block_size = block_size
847 grid_size = (1, 1)
848
849 logit("MSG: Processing raster=%s using read_block_size=%s block_size=%s of grid=%s in level=%d\n" % \
850 (
str(raster_size),
str(read_block_size),
str(block_size),
str(grid_size), level))
851
852
853 if level == 1:
854 if i == 0 and options.create_table:
855 gt = get_gdal_geotransform(ds)
856 pixel_size = ( gt[1], gt[5] )
857 pixel_types = collect_pixel_types(ds, band_from, band_to)
858 nodata_values = collect_nodata_values(ds, band_from, band_to)
859 extent = calculate_bounding_box(ds, gt)
860 sql = make_sql_addrastercolumn(options, pixel_types, nodata_values,
861 pixel_size, block_size, extent)
862 options.output.write(sql)
863 gen_table = options.table
864
865 else:
866
867
868
869 schema_table_names = make_sql_schema_table_names(options.table)
870 level_table_name =
'o_' +
str(level) +
'_' + schema_table_names[1]
871 level_table = schema_table_names[0] + '.' + level_table_name
872 if i == 0:
873 sql = make_sql_create_table(options, level_table, True)
874 options.output.write(sql)
875 sql = make_sql_register_overview(options, level_table_name, level)
876 options.output.write(sql)
877 gen_table = level_table
878
879
880 tile_count = 0
881 hexwkb = ''
882
883 for ycell in range(0, grid_size[1]):
884 for xcell in range(0, grid_size[0]):
885
886 xoff = xcell * read_block_size[0]
887 yoff = ycell * read_block_size[1]
888
889 logit("MSG: --------- CELL #%04d\tindex = %d x %d\tdim = (%d x %d)\t(%d x %d) \t---------\n" % \
890 (tile_count, xcell, ycell, xoff, yoff, xoff + read_block_size[0], yoff + read_block_size[1]))
891
892 if options.block_size is not None:
893 hexwkb = ''
894 hexwkb += wkblify_raster_header(options, ds, level, (xoff, yoff),
895 block_size[0], block_size[1])
896 else:
897 hexwkb += wkblify_raster_header(options, ds, level, (xoff, yoff))
898
899 for b in range(band_from, band_to):
900 band = ds.GetRasterBand(b)
901 assert band is not None, "Missing GDAL raster band %d" % b
902 logit("MSG: Band %d\n" % b)
903
904 hexwkb += wkblify_band_header(options, band)
905 hexwkb += wkblify_band(options, band, level, xoff, yoff, read_block_size, block_size, infile, b)
906
907
908 check_hex(hexwkb)
909 sql = make_sql_insert_raster(gen_table, options.column, hexwkb, options.filename, infile)
910 options.output.write(sql)
911
912 tile_count = tile_count + 1
913
914 return (gen_table, tile_count)
915