80 """Collects, parses and validates command line arguments."""
82 prs = OptionParser(version=
"%prog $Revision$")
85 grp0 = OptionGroup(prs,
"Source and destination",
86 "*** Mandatory parameters always required ***")
87 grp0.add_option(
"-r",
"--raster", dest=
"raster", action=
"append", default=
None,
88 help=
"append raster to list of input files, at least one raster "
89 "file required. You may use wildcards (?,*) for specifying multiple files.")
90 grp0.add_option(
"-t",
"--table", dest=
"table", action=
"store", default=
None,
91 help=
"raster destination in form of [<schema>.]<table> or base raster table for overview level>1, required")
92 prs.add_option_group(grp0);
95 grp_r = OptionGroup(prs,
"Raster processing",
96 "Optional parameters used to manipulate input raster dataset")
97 grp_r.add_option(
"-s",
"--srid", dest=
"srid", action=
"store", type=
"int", default=-1,
98 help=
"assign output raster with specified SRID")
99 grp_r.add_option(
"-b",
"--band", dest=
"band", action=
"store", type=
"int", default=
None,
100 help=
"specify number of the band to be extracted from raster file")
101 grp_r.add_option(
"-k",
"--block-size", dest=
"block_size", action=
"store", default=
None,
102 help=
"cut raster(s) into tiles to be inserted one by table row."
103 "BLOCK_SIZE is expressed as WIDTHxHEIGHT. Incomplete tiles are completed with nodata values")
104 grp_r.add_option(
"-R",
"--register", dest=
"register", action=
"store_true", default=
False,
105 help=
"register the raster as a filesystem (out-db) raster")
106 grp_r.add_option(
"-l",
"--overview-level", dest=
"overview_level", action=
"store", type=
"int", default=1,
107 help=
'create overview tables named as o_<LEVEL>_<RASTER_TABLE> and '
108 'populate with GDAL-provided overviews (regular blocking only)')
109 prs.add_option_group(grp_r);
112 grp_t = OptionGroup(prs,
'Database processing',
113 'Optional parameters used to manipulate database objects')
114 grp_t.add_option(
'-c',
'--create', dest=
'create_table', action=
'store_true', default=
False,
115 help=
'create new table and populate it with raster(s), this is the default mode')
116 grp_t.add_option(
'-a',
'--append', dest=
'append_table', action=
'store_true', default=
False,
117 help=
'append raster(s) to an existing table')
118 grp_t.add_option(
"-d",
"--drop", dest=
"drop_table", action=
"store_true", default=
False,
119 help=
"drop table, create new one and populate it with raster(s)")
120 grp_t.add_option(
"-f",
"--field", dest=
"column", action=
"store", default=g_rt_column,
121 help=
"specify name of destination raster column, default is 'rast'")
122 grp_t.add_option(
"-F",
"--filename", dest=
"filename", action=
"store_true", default=
False,
123 help=
"add a column with the name of the file")
124 grp_t.add_option(
"-I",
"--index", dest=
"index", action=
"store_true", default=
False,
125 help=
"create a GiST index on the raster column")
126 grp_t.add_option(
"-M",
"--vacuum", dest=
"vacuum", action=
"store_true", default=
False,
127 help=
"issue VACUUM command against all generated tables")
128 grp_t.add_option(
'-V',
'--create-raster-overviews', dest=
'create_raster_overviews_table',
129 action=
'store_true', default=
False,
130 help=
'create RASTER_OVERVIEWS table used to store overviews metadata')
131 prs.add_option_group(grp_t);
134 grp_u = OptionGroup(prs,
"Miscellaneous",
"Other optional parameters")
135 grp_u.add_option(
"-e",
"--endian", dest=
"endian", action=
"store", type=
"int", default=g_rt_endian,
136 help=
"control endianness of generated binary output of raster; "
137 "specify 0 for XDR and 1 for NDR (default); "
138 "only NDR output is supported now")
139 grp_u.add_option(
"-w",
"--raster-version", dest=
"version",
140 action=
"store", type=
"int", default=g_rt_version,
141 help=
"specify version of raster protocol, default is 0; "
142 "only value of zero is supported now")
143 grp_u.add_option(
"-o",
"--output", dest=
"output", action=
"store", default=sys.stdout,
144 help=
"specify output file, otherwise send to stdout")
145 grp_u.add_option(
"-v",
"--verbose", dest=
"verbose", action=
"store_true", default=
False,
146 help=
"verbose mode. Useful for debugging")
147 prs.add_option_group(grp_u);
149 (opts, args) = prs.parse_args()
152 if opts.create_table
and opts.drop_table
and opts.append_table:
153 prs.error(
"options -c, -a and -d are mutually exclusive")
154 if opts.create_table
and opts.drop_table:
155 prs.error(
"options -c and -d are mutually exclusive")
156 if opts.create_table
and opts.append_table:
157 prs.error(
"options -c and -a are mutually exclusive")
158 if opts.append_table
and opts.drop_table:
159 prs.error(
"options -a and -d are mutually exclusive")
160 if (
not opts.create_table
and not opts.drop_table
and not opts.append_table)
or opts.drop_table:
161 opts.create_table =
True
163 if opts.raster
is None:
164 prs.error(
"use option -r to specify at least one input raster. Wildcards (?,*) are accepted.")
166 if opts.block_size
is not None and len(opts.raster) != 1:
167 prs.error(
"regular blocking supports single-raster input only")
169 if opts.block_size
is not None:
170 if len(opts.block_size.split(
'x')) != 2
and len(opts.block_size.split(
'X')) != 2:
171 prs.error(
"invalid format of block size, expected WIDTHxHEIGHT")
173 if opts.overview_level > 1
and opts.block_size
is None:
174 prs.error(
"regular blocking mode required to enable overviews support (level > 1)")
176 if opts.create_raster_overviews_table
and opts.overview_level <= 1:
177 prs.error(
'create table for RASTER_OVERVIEWS available only if overviews import requested')
184 if opts.table
is None:
185 prs.error(
"use option -t to specify raster destination table")
186 if len(opts.table.split(
'.')) > 2:
187 prs.error(
"invalid format of table name specified with option -t, expected [<schema>.]table")
189 if opts.output
is None:
190 prs.error(
"failed to initialise output file, try to use option -o explicitly")
192 if opts.version
is not None:
193 if opts.version != g_rt_version:
194 prs.error(
"invalid version of WKT Raster protocol specified, only version 0 is supported")
196 prs.error(
"use option -w to specify version of WKT Raster protocol")
198 if opts.endian
is not None:
199 if opts.endian != NDR
and opts.endian != XDR:
200 prs.error(
"invalid endianness value, valid ones are 0 for NDR or 1 for XDR")
202 prs.error(
"use option -e to specify endianness of binary output")