PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ wkblify_raster_level()

def raster2pgsql.wkblify_raster_level (   options,
  ds,
  level,
  band_range,
  infile,
  i 
)

Definition at line 830 of file raster2pgsql.py.

830 def 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  # Collect raster and block dimensions
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 # Whole raster as a single block
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  # Register base raster in RASTER_COLUMNS - SELECT AddRasterColumn();
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  # Create overview table and register in RASTER_OVERVIEWS
867 
868  # CREATE TABLE o_<LEVEL>_<NAME> ( rid serial, options.column RASTER )
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  # Write (original) raster to hex binary output
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 = '' # Reset buffer as single INSERT per tile is generated
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  # INSERT INTO
908  check_hex(hexwkb) # TODO: Remove to not to decrease performance
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 
#define str(s)
def check_hex(hex, bytes_size=None)
def logit(msg)
def make_sql_create_table(options, table=None, is_overview=False)
def make_sql_insert_raster(table, rast, hexwkb, insert_filename, file)
def wkblify_raster_level(options, ds, level, band_range, infile, i)
def wkblify_raster_header(options, ds, level, ulp, xsize=None, ysize=None)
def parse_block_size(options)
def wkblify_band_header(options, band)
def make_sql_register_overview(options, ov_table, ov_factor)
def get_gdal_geotransform(ds)
def make_sql_addrastercolumn(options, pixeltypes, nodata, pixelsize, blocksize, extent)
def make_sql_schema_table_names(schema_table)
def calculate_bounding_box(ds, gt)
def calculate_grid_size(raster_size, block_size)
def collect_nodata_values(ds, band_from, band_to)
def wkblify_band(options, band, level, xoff, yoff, read_block_size, block_size, infile, bandidx)
def collect_pixel_types(ds, band_from, band_to)

References calculate_bounding_box(), calculate_grid_size(), check_hex(), collect_nodata_values(), collect_pixel_types(), get_gdal_geotransform(), logit(), make_sql_addrastercolumn(), make_sql_create_table(), make_sql_insert_raster(), make_sql_register_overview(), make_sql_schema_table_names(), parse_block_size(), str, wkblify_band(), wkblify_band_header(), and wkblify_raster_header().

Referenced by wkblify_raster().

Here is the call graph for this function:
Here is the caller graph for this function: