[postgis-commits] svn - r3818 - spike/wktraster/scripts
postgis-commits at postgis.refractions.net
postgis-commits at postgis.refractions.net
Mon Mar 9 12:32:43 PDT 2009
Author: mloskot
Date: 2009-03-09 12:32:42 -0700 (Mon, 09 Mar 2009)
New Revision: 3818
Modified:
spike/wktraster/scripts/gdal2wktraster.py
Log:
gdal2wktraster.py: This is patch from Pierre at the Toronto Sprint:
* Support processing of directories of raster files. Raster files specification using wildcards.
* Option -I, --index to generated GiST index on raster column.
Modified: spike/wktraster/scripts/gdal2wktraster.py
===================================================================
--- spike/wktraster/scripts/gdal2wktraster.py 2009-03-09 18:40:23 UTC (rev 3817)
+++ spike/wktraster/scripts/gdal2wktraster.py 2009-03-09 19:32:42 UTC (rev 3818)
@@ -7,6 +7,9 @@
# For more details about raster2pgsql tool, see Specification page:
# http://www.cef-cfr.ca/index.php?n=Membres.PierreRacineWKTRasterSpecifications
#
+# For this script to work you'll have to install the GDAL Python library
+# from http://pypi.python.org/pypi/GDAL/
+#
# Copyright (C) 2009 Mateusz Loskot <mateusz at loskot.net>
#
# This program is free software; you can redistribute it and/or modify
@@ -28,7 +31,7 @@
import osgeo.gdalconst as gdalc
from optparse import OptionParser
import binascii
-import sys
+import sys, glob
###############################################################################
# CONSTANTS - DO NOT CHANGE
@@ -45,7 +48,7 @@
optprs = OptionParser(version="%prog $Revision: 3752 $")
# Mandatory parameters
optprs.add_option("-r", "--raster", dest="raster", action="append", default=None,
- help="append raster to list of input files, at least one raster file required")
+ help="append raster to list of input files, at least one raster file required. You may use wildcards (?,*) for specifying multiple files.")
optprs.add_option("-t", "--table", dest="table", action="store", default=None,
help="raster destination in form of [<schema>.]<table>, required")
# Optional parameters
@@ -59,6 +62,8 @@
help="drop table, create new one and populate with raster(s)")
optprs.add_option("-f", "--field", dest="column", action="store", default=g_rt_column,
help="specify name of raster data column, default is 'rast'")
+ optprs.add_option("-I", "--index", dest="index", action="store_true", default=False,
+ help="Create a GiST index on the raster column")
optprs.add_option("-o", "--output", dest="output", action="store", default=sys.stdout,
help="specify file for conversion output, otherwise send to stdout")
optprs.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False,
@@ -73,7 +78,7 @@
opts.create_table = True
if opts.raster is None:
- optprs.error("use option -r to specify at least one input raster")
+ optprs.error("use option -r to specify at least one input raster. Wildcards (?,*) are accepted.")
# XXX: Now, if --band=Nth, then only Nth band of all specified rasters is dumped/imported
# This behavior can be changed to support only single-raster input if --band option used.
@@ -248,7 +253,7 @@
return hexwkb
-def make_sql_table_name(schema_table):
+def make_sql_full_table_name(schema_table):
st = schema_table.split('.')
if len(st) == 1:
st.insert(0, "public")
@@ -256,21 +261,27 @@
table = "\"%s\".\"%s\"" % (st[0], st[1])
return table
+def make_sql_table_name(schema_table):
+ st = schema_table.split('.')
+ assert len(st) == 1 or len(st) == 2, "Invalid format of table name, expected [<schema>.]table"
+ if len(st) == 2:
+ return st[1]
+ return st[0]
def make_sql_drop_table(table):
- sql = "DROP TABLE IF EXISTS %s CASCADE;\n" % make_sql_table_name(table)
+ sql = "DROP TABLE IF EXISTS %s CASCADE;\n" % make_sql_full_table_name(table)
logit("SQL: %s" % sql)
return sql
def make_sql_create_table(table, rast):
- sql = "CREATE TABLE %s (rid serial PRIMARY KEY, \"%s\" RASTER );\n" % (make_sql_table_name(table), rast)
+ sql = "CREATE TABLE %s (rid serial PRIMARY KEY, \"%s\" RASTER );\n" % (make_sql_full_table_name(table), rast)
logit("SQL: %s" % sql)
return sql
def make_sql_insert_raster(table, rast, hexwkb):
- sql = "INSERT INTO %s ( %s ) VALUES ( (\'%s\')::raster );\n" % (make_sql_table_name(table), rast, hexwkb)
+ sql = "INSERT INTO %s ( %s ) VALUES ( (\'%s\')::raster );\n" % (make_sql_full_table_name(table), rast, hexwkb)
# NOTE: Usually, no need for such detailed verbosity
#logit("SQL: %s" % sql)
return sql
@@ -303,19 +314,30 @@
# Burn all specified input raster files into single WKTRaster table
i = 0
+
for infile in opts.raster:
- logit("MSG: Raster #%d: %s\n" % (i + 1, infile))
+ filelist = glob.glob(infile)
+ for file in filelist:
+ logit("MSG: Raster #%d: %s\n" % (i + 1, file))
- hexwkb = wkblify_raster(infile, opts.band, g_rt_version, g_rt_endiannes, opts.srid)
- assert len(hexwkb) > 0, "Error: No HEX WKB generated"
- assert (len(hexwkb) % 2 == 0), "Error: Invalid size of generated HEX WKB"
+ hexwkb = wkblify_raster(file, opts.band, g_rt_version, g_rt_endiannes, opts.srid)
+ assert len(hexwkb) > 0, "Error: No HEX WKB generated"
+ assert (len(hexwkb) % 2 == 0), "Error: Invalid size of generated HEX WKB"
- # INSERT INTO ... (rast) VALUES (...)
- sql = make_sql_insert_raster(opts.table, opts.column, hexwkb)
- fout.write(sql)
+ # INSERT INTO ... (rast) VALUES (...)
+ sql = make_sql_insert_raster(opts.table, opts.column, hexwkb)
+ fout.write(sql)
- i += 1
+ i += 1
+
+ if opts.index:
+ # CREATE INDEX "table_column_gist" ON "public"."table" using gist (rt_raster_envelope(rast));
+ sql = "CREATE INDEX \"%s_%s_gist\" ON %s using gist (rt_raster_envelope(%s));\n" % (make_sql_table_name(opts.table), opts.column, make_sql_full_table_name(opts.table),opts.column)
+
+ fout.write(sql)
+
+
# Cleanup
sys.stdout = saved_out
More information about the postgis-commits
mailing list