PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches
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
31from __future__ import print_function
32from optparse import OptionParser
33import sys
34import os
35import psycopg2
36
37def logit(msg):
38 if VERBOSE is True:
39 sys.stderr.write("LOG - " + str(msg) + "\n")
40
41
42try:
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
98except Exception as e:
99 print("ERROR: ", e)
#define str(s)