[GRASS-SVN] r32182 - grass/trunk/scripts/r.in.aster
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Jul 21 02:41:49 EDT 2008
Author: cmbarton
Date: 2008-07-21 02:41:47 -0400 (Mon, 21 Jul 2008)
New Revision: 32182
Modified:
grass/trunk/scripts/r.in.aster/r_in_aster.py
Log:
Minor improvements to error checking and cleanup
Modified: grass/trunk/scripts/r.in.aster/r_in_aster.py
===================================================================
--- grass/trunk/scripts/r.in.aster/r_in_aster.py 2008-07-20 21:35:01 UTC (rev 32181)
+++ grass/trunk/scripts/r.in.aster/r_in_aster.py 2008-07-21 06:41:47 UTC (rev 32182)
@@ -1,22 +1,24 @@
#!/usr/bin/python
############################################################################
#
-# MODULE: r_in_aster.py
-# AUTHOR(S): Michael Barton (michael.barton at asu.edu)
-# Based on r.in.aster bash script for GRASS
-# by Michael Barton and Paul Kelly
-# PURPOSE: Rectifies, georeferences, & imports Terra-ASTER imagery
-# using gdalwarp
-# COPYRIGHT: (C) 2008 by the GRASS Development Team
+# MODULE: r_in_aster.py
+# AUTHOR(S): Michael Barton (michael.barton at asu.edu) and
+# Glynn Clements (glynn at gclements.plus.com)
+# Based on r.in.aster bash script for GRASS
+# by Michael Barton and Paul Kelly
+# PURPOSE: Rectifies, georeferences, & imports Terra-ASTER imagery
+# using gdalwarp
+# COPYRIGHT: (C) 2008 by the GRASS Development Team
#
-# This program is free software under the GNU General Public
-# License (>=v2). Read the file COPYING that comes with GRASS
-# for details.
+# This program is free software under the GNU General Public
+# License (>=v2). Read the file COPYING that comes with GRASS
+# for details.
#
#############################################################################
#
# Requires:
# gdalwarp
+# gdal compiled with HDF4 support
#%Module
#% description: Georeference, rectify, and import Terra-ASTER imagery and relative DEM's using gdalwarp.
@@ -60,14 +62,60 @@
import os
import subprocess
import platform
+import grass
+bands = {
+ 'L1A': {
+ '1': "VNIR_Band1:ImageData",
+ '2': "VNIR_Band2:ImageData",
+ '3n': "VNIR_Band3N:ImageData",
+ '3b': "VNIR_Band3B:ImageData",
+ '4': "SWIR_Band4:ImageData",
+ '5': "SWIR_Band5:ImageData",
+ '6': "SWIR_Band6:ImageData",
+ '7': "SWIR_Band7:ImageData",
+ '8': "SWIR_Band8:ImageData",
+ '9': "SWIR_Band9:ImageData",
+ '10': "TIR_Band10:ImageData",
+ '11': "TIR_Band11:ImageData",
+ '12': "TIR_Band12:ImageData",
+ '13': "TIR_Band13:ImageData",
+ '14': "TIR_Band14:ImageData"
+ },
+ 'L1B': {
+ '1': "VNIR_Swath:ImageData1",
+ '2': "VNIR_Swath:ImageData2",
+ '3n': "VNIR_Swath:ImageData3N",
+ '3b': "VNIR_Swath:ImageData3B",
+ '4': "SWIR_Swath:ImageData4",
+ '5': "SWIR_Swath:ImageData5",
+ '6': "SWIR_Swath:ImageData6",
+ '7': "SWIR_Swath:ImageData7",
+ '8': "SWIR_Swath:ImageData8",
+ '9': "SWIR_Swath:ImageData9",
+ '10': "TIR_Swath:ImageData10",
+ '11': "TIR_Swath:ImageData11",
+ '12': "TIR_Swath:ImageData12",
+ '13': "TIR_Swath:ImageData13",
+ '14': "TIR_Swath:ImageData14"
+ }
+}
+
+def _message(msg, *args):
+ subprocess.call(["g.message", "message=%s" % msg] + list(args))
+
+def debug(msg):
+ _message(msg, '-d')
+
+def message(msg):
+ _message(msg)
+
+def error(msg):
+ _message(msg, '-e')
+ sys.exit(1)
+
def main():
- #if ( os.getenv("GIS_FLAG_OVERWRITE") == "1" ):
- # print "Flag -f set"
- #else:
- # print "Flag -f not set"
-
#check whether gdalwarp is in path and executable
p = None
try:
@@ -75,8 +123,7 @@
except:
pass
if p == None or p != 0:
- subprocess.call(["g.message", "-e", "gdalwarp is not in the path and executable"])
- return
+ error("gdalwarp is not in the path and executable")
#initialize variables
dataset = ''
@@ -85,128 +132,53 @@
band = ''
outfile = ''
bandlist = []
-
+
#create temporary file to hold gdalwarp output before importing to GRASS
- tempfileCmd = subprocess.Popen(["g.tempfile","pid=%d" % os.getpid()],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- tempfile = tempfileCmd.stdout.read().strip()
- tempfile=tempfile + '.tif'
+ tempfile = grass.read_command("g.tempfile", pid = os.getpid()).strip() + '.tif'
#get projection information for current GRASS location
- p = subprocess.Popen(['g.proj', '-jf'], stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- proj = p.stdout.read()
+ proj = grass.read_command('g.proj', flags = 'jf').strip()
#currently only runs in projected location
if "XY location" in proj:
- subprocess.call(["g.message", "-e", "This module needs to be run in a projected location (found: %s)" % proj])
- return
+ error ("This module needs to be run in a projected location (found: %s)" % proj)
-
+
#process list of bands
- if os.getenv("GIS_OPT_BAND").strip() == 'all':
- bandlist = ['1','2','3n','3b','4','5','6','7','8','9','10','11','12','13','14']
+ allbands = ['1','2','3n','3b','4','5','6','7','8','9','10','11','12','13','14']
+ if options['band'].strip() == 'all':
+ bandlist = allbands
else:
- bandlist = os.getenv("GIS_OPT_BAND").split(',')
-
- print 'bandlist =',bandlist
+ bandlist = options['band'].split(',')
#initialize datasets for L1A and L1B
- #
-
- if os.getenv("GIS_OPT_PROCTYPE") == "L1A":
+ if options['proctype'] in ["L1A", "L1B"]:
for band in bandlist:
- if band == '1':
- dataset="VNIR_Band1:ImageData"
- elif band == '2':
- dataset="VNIR_Band2:ImageData"
- elif band == '3n':
- dataset="VNIR_Band3N:ImageData"
- elif band == '3b':
- dataset="VNIR_Band3B:ImageData"
- elif band == '4':
- dataset="SWIR_Band4:ImageData"
- elif band == '5':
- dataset="SWIR_Band5:ImageData"
- elif band == '6':
- dataset="SWIR_Band6:ImageData"
- elif band == '7':
- dataset="SWIR_Band7:ImageData"
- elif band == '8':
- dataset="SWIR_Band8:ImageData"
- elif band == '9':
- dataset="SWIR_Band9:ImageData"
- elif band == '10':
- dataset="TIR_Band10:ImageData"
- elif band == '11':
- dataset="TIR_Band11:ImageData"
- elif band == '12':
- dataset="TIR_Band12:ImageData"
- elif band == '13':
- dataset="TIR_Band13:ImageData"
- elif band == '14':
- dataset="TIR_Band14:ImageData"
- srcfile = "HDF4_EOS:EOS_SWATH:%s:%s" % (os.getenv("GIS_OPT_INPUT"), dataset)
- import_aster(proj, srcfile, tempfile, band)
-
- elif os.getenv("GIS_OPT_PROCTYPE") == "L1B":
- for band in bandlist:
- if band == '1':
- dataset="VNIR_Swath:ImageData1"
- elif band == '2':
- dataset="VNIR_Swath:ImageData2"
- elif band == '3n':
- dataset="VNIR_Swath:ImageData3N"
- elif band == '3b':
- dataset="VNIR_Swath:ImageData3B"
- elif band == '4':
- dataset="SWIR_Swath:ImageData4"
- elif band == '5':
- dataset="SWIR_Swath:ImageData5"
- elif band == '6':
- dataset="SWIR_Swath:ImageData6"
- elif band == '7':
- dataset="SWIR_Swath:ImageData7"
- elif band == '8':
- dataset="SWIR_Swath:ImageData8"
- elif band == '9':
- dataset="SWIR_Swath:ImageData9"
- elif band == '10':
- dataset="TIR_Swath:ImageData10"
- elif band == '11':
- dataset="TIR_Swath:ImageData11"
- elif band == '12':
- dataset="TIR_Swath:ImageData12"
- elif band == '13':
- dataset="TIR_Swath:ImageData13"
- elif band == '14':
- dataset="TIR_Swath:ImageData14"
- srcfile = "HDF4_EOS:EOS_SWATH:%s:%s" % (os.getenv("GIS_OPT_INPUT"), dataset)
- import_aster(proj, srcfile, tempfile, band)
-
- elif os.getenv("GIS_OPT_PROCTYPE") == "DEM":
- srcfile=os.getenv("GIS_OPT_INPUT")
+ if band in allbands:
+ dataset = bands[options['proctype']][band]
+ srcfile = "HDF4_EOS:EOS_SWATH:%s:%s" % (options['input'], dataset)
+ import_aster(proj, srcfile, tempfile, band)
+ else:
+ error('band %s is not an available Terra/ASTER band' % band)
+ elif options['proctype'] == "DEM":
+ srcfile=options['input']
import_aster(proj, srcfile, tempfile, "DEM")
- #for debugging
- #print 'source file=',srcfile
- #print 'tempfile=',tempfile
- #print 'proj =',proj
-
# write cmd history: Not sure how to replicate this in Python yet
#r.support "$GIS_OPT_OUTPUT" history="${CMDLINE}"
#cleanup
- subprocess.call(["g.message", "Cleaning up ..."])
+ message("Cleaning up ...")
os.remove(tempfile)
- subprocess.call(["g.message", "Done."])
+ message("Done.")
return
def import_aster(proj, srcfile, tempfile, band):
#run gdalwarp with selected options (must be in $PATH)
#to translate aster image to geotiff
- subprocess.call(["g.message", "Georeferencing aster image ..."])
- subprocess.call(["g.message", "-d", "message=gdalwarp -t_srs %s %s %s" % (proj, srcfile, tempfile)])
+ message("Georeferencing aster image ...")
+ debug("gdalwarp -t_srs %s %s %s" % (proj, srcfile, tempfile))
if platform.system() == "Darwin":
cmd = ["arch", "-i386", "gdalwarp", "-t_srs", proj, srcfile, tempfile ]
@@ -216,25 +188,16 @@
if p != 0:
#check to see if gdalwarp executed properly
return
-
+
#p = subprocess.call(["gdal_translate", srcfile, tempfile])
#import geotiff to GRASS
- subprocess.call(["g.message", "Importing into GRASS ..."])
- outfile = os.getenv("GIS_OPT_OUTPUT").strip()+'.'+band
- cmd = ["r.in.gdal", "input=%s" % tempfile, "output=%s" % outfile]
- if ( os.getenv("GIS_FLAG_O") == "1" ):
- cmd.append("--o")
- #msgcmd = ['g.message']
- #msgcmd = msgcmd.extend(cmd)
- #subprocess.call(msgcmd)
- subprocess.call(cmd)
-
+ message("Importing into GRASS ...")
+ outfile = options['output'].strip()+'.'+band
+ grass.run_command("r.in.gdal", overwrite = flags['o'], input = tempfile, output = outfile)
+
return
if __name__ == "__main__":
- if ( len(sys.argv) <= 1 or sys.argv[1] != "@ARGS_PARSED@" ):
- os.execvp("g.parser", [sys.argv[0]] + sys.argv)
- else:
- main();
-
+ options, flags = grass.parser()
+ main()
More information about the grass-commit
mailing list