PostGIS  3.0.6dev-r@@SVN_REVISION@@
rtgdalraster.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 #
3 #
4 # A simple utility for passing parameters to ST_AsGDALRaster
5 # for a GDAL raster output
6 # This utility is handy for debugging purposes.
7 #
8 # Example:
9 # rtgdalraster.py -d "dbname=postgres" -r "(SELECT rast FROM pele LIMIT 1)" -f JPEG -o pele.jpg
10 #
11 #
12 
31 from __future__ import print_function
32 from optparse import OptionParser
33 import sys
34 import os
35 import psycopg2
36 
37 def logit(msg):
38  if VERBOSE is True:
39  sys.stderr.write("LOG - " + str(msg) + "\n")
40 
41 
42 try:
43  prs = OptionParser(version="%prog",
44  usage="%prog -d <DB> -r <RASTER> -o <FILE> [-f <FORMAT>] [-c <OPTIONS>]",
45  description="Output raster in a GDAL raster format")
46  prs.add_option("-d", "--db", dest="db", action="store", default=None,
47  help="PostgreSQL database connection string, required")
48  prs.add_option("-r", "--raster", dest="raster", action="store", default=None,
49  help="sql expression to create or access a existing raster, required")
50  prs.add_option("-o", "--output", dest="output", action="store", default=None,
51  help="file to put the output of ST_AsGDALRaster if successful, required")
52  prs.add_option("-f", "--format", dest="format", action="store", default="GTiff",
53  help="format of GDAL raster output, optional, default=GTiff")
54  prs.add_option("-c", "--config", dest="config", action="store", default=None,
55  help="comma separated list of GDAL raster creation options, optional")
56  prs.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False,
57  help="be excessively verbose and useful for debugging")
58 
59  (opts, args) = prs.parse_args()
60 
61  if opts.db is None:
62  prs.error("use -d option to specify database connection string")
63  if opts.raster is None:
64  prs.error("use -r option to specify a sql expression for a raster")
65  if opts.output is None:
66  prs.error("use -o option to specify raster output file")
67 
68  if opts.config is not None:
69  opts.cfg = opts.config.split(',')
70  else:
71  opts.cfg = None
72 
73  global VERBOSE
74  VERBOSE = opts.verbose
75 
76  conn = psycopg2.connect(opts.db)
77  logit("Connected to %s" % opts.db)
78  logit("Raster expression is %s" % opts.raster)
79 
80  cur = conn.cursor()
81  sql = "SELECT ST_AsGDALRaster(%s, %%s, %%s::text[], NULL::integer)" % (opts.raster)
82  cur.execute(sql, (opts.format, opts.cfg))
83  logit("Number of rows: %i" % cur.rowcount)
84  rec = cur.fetchone()[0];
85  logit("size of raster (bytes): %i" % len(rec))
86 
87  fh = open(opts.output, 'wb', -1)
88  fh.write(rec);
89  fh.flush();
90  fh.close();
91  logit("size of %s (bytes): %i" % (opts.output, os.stat(opts.output)[6]));
92 
93  cur.close();
94  conn.close();
95 
96  print("raster outputted to %s" % opts.output);
97 
98 except Exception as e:
99  print("ERROR: ", e)
#define str(s)
def logit(msg)
Definition: rtgdalraster.py:37