[GRASS-SVN] r33658 - grass/trunk/scripts/v.in.mapgen
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Oct 2 18:47:35 EDT 2008
Author: glynn
Date: 2008-10-02 18:47:35 -0400 (Thu, 02 Oct 2008)
New Revision: 33658
Added:
grass/trunk/scripts/v.in.mapgen/v.in.mapgen.py
Log:
Converted v.in.mapgen to Python
Added: grass/trunk/scripts/v.in.mapgen/v.in.mapgen.py
===================================================================
--- grass/trunk/scripts/v.in.mapgen/v.in.mapgen.py (rev 0)
+++ grass/trunk/scripts/v.in.mapgen/v.in.mapgen.py 2008-10-02 22:47:35 UTC (rev 33658)
@@ -0,0 +1,198 @@
+#!/usr/bin/env python
+#
+############################################################################
+#
+# MODULE: v.in.mapgen
+#
+# AUTHOR(S): Andreas Lange, andreas.lange at rhein-main.de
+# Updated for GRASS 6 by Hamish Bowman
+# Converted to Python by Glynn Clements
+#
+# PURPOSE: Import data from Mapgen or Matlab into a GRASS vector map
+#
+# COPYRIGHT: Original version (c) Andreas Lange
+# Updates by Hamish Bowman
+# (C) 2008 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.
+#############################################################################
+#
+# REQUIREMENTS: awk
+#
+# DATA AVAILABILITY: e.g., NOAA's Online Coastline Extractor
+# http://www.ngdc.noaa.gov/mgg/shorelines/shorelines.html
+#
+
+#%Module
+#% description: Import Mapgen or Matlab vector maps into GRASS.
+#% keywords: vector, import
+#%End
+#%flag
+#% key: f
+#% description: Input map is in Matlab format
+#%end
+#%flag
+#% key: z
+#% description: Create a 3D vector points map from 3 column Matlab data
+#%end
+#%option
+#% key: input
+#% type: string
+#% gisprompt: old_file,file,input
+#% description: Name of input file in Mapgen/Matlab format
+#% required : yes
+#%end
+#%option
+#% key: output
+#% type: string
+#% gisprompt: new,vector,vector
+#% description: Name for output vector map (omit for display to stdout)
+#% required : no
+#%end
+
+import sys
+import os
+import atexit
+import string
+import time
+import shutil
+import grass
+
+def cleanup():
+ grass.try_remove(tmp)
+ grass.try_remove(tmp + '.dig')
+
+def main():
+ global tmp
+
+ infile = options['input']
+ output = options['output']
+ matlab = flags['f']
+ threeD = flags['z']
+
+ prog = 'v.in.mapgen'
+
+ opts = ""
+
+ if not os.path.isfile(infile):
+ grass.fatal("Input file <%s> not found." % infile)
+
+ if output:
+ name = output
+ else:
+ name = ''
+
+ if threeD:
+ matlab = True
+
+ if threeD:
+ do3D = 'z'
+ else:
+ do3D = ''
+
+ tmp = grass.tempfile()
+
+ #### create ascii vector file
+ inf = file(infile)
+ outf = file(tmp, 'w')
+
+ if matlab:
+ ## HB: OLD v.in.mapgen.sh Matlab import command follows.
+ ## I have no idea what it's all about, so "new" matlab format will be
+ ## a series of x y with "nan nan" breaking lines. (as NOAA provides)
+ ## Old command:
+ # tac $infile | $AWK 'BEGIN { FS="," ; R=0 }
+ # $1~/\d*/ { printf("L %d\n", R) }
+ # $1~/ .*/ { printf(" %lf %lf\n", $2, $1) ; ++R }
+ # $1~/END/ { }' | tac > "$TMP"
+
+ ## matlab format.
+ points = []
+ for line in inf:
+ f = line.split()
+ if f[0].lower() == 'nan':
+ if points != []:
+ outf.write("L %d\n" % len(points))
+ for point in points:
+ outf.write(" %.8f %.8f %.8f\n" % tuple(map(float,point)))
+ points = []
+ else:
+ if len(f) == 2:
+ f.append('0')
+ points.append(f)
+ if points != []:
+ outf.write("L %d\n" % len(points))
+ for point in points:
+ outf.write(" %.8f %.8f %.8f\n" % tuple(map(float,point)))
+ else:
+ ## mapgen format.
+ points = []
+ for line in inf:
+ if line[0] == '#':
+ if points != []:
+ outf.write("L %d\n" % len(points))
+ for point in points:
+ outf.write(" %.8f %.8f\n" % tuple(map(float,point)))
+ points = []
+ else:
+ points.append(line.rstrip('\r\n').split('\t'))
+ if points != []:
+ outf.write("L %d\n" % len(points))
+ for point in points:
+ outf.write(" %.8f %.8f\n" % tuple(map(float,point)))
+
+ outf.close()
+ inf.close()
+
+ #### create digit header
+ digfile = tmp + '.dig'
+ outf = file(digfile, 'w')
+ t = string.Template(\
+"""ORGANIZATION: GRASSroots organization
+DIGIT DATE: $date
+DIGIT NAME: $prog
+MAP NAME: $name
+MAP DATE: $year
+MAP SCALE: 1
+OTHER INFO: Imported by $user@$host
+ZONE: 0
+MAP THRESH: 0
+VERTI:
+""")
+ date = time.strftime("%m/%d/%y")
+ year = time.strftime("%Y")
+ user = os.getenv('USERNAME') or os.getenv('LOGNAME')
+ host = os.getenv('COMPUTERNAME') or os.uname()[1]
+ s = t.substitute(prog = prog, name = name, date = date, year = year,
+ user = user, host = host)
+ outf.write(s)
+
+ #### process points list to ascii vector file (merge in vertices)
+ inf = file(tmp)
+ shutil.copyfileobj(inf, outf)
+ inf.close()
+
+ outf.close()
+
+ if not name:
+ #### if no name for vector file given, cat to stdout
+ grass.message("Output to stdout")
+ inf = file(digfile)
+ shutil.copyfileobj(inf, sys.stdout)
+ inf.close()
+ else:
+ #### import to binary vector file
+ grass.message("Importing with v.in.ascii ...")
+ if grass.run_command('v.in.ascii', flags = do3D, input = digfile,
+ output = name, format = 'standard') == 0:
+ grass.message('"%s" successfully created' % name)
+ else:
+ grass.fatal('An error occured on creating "%s", please check' % name)
+
+if __name__ == "__main__":
+ options, flags = grass.parser()
+ atexit.register(cleanup)
+ main()
+
Property changes on: grass/trunk/scripts/v.in.mapgen/v.in.mapgen.py
___________________________________________________________________
Name: svn:executable
+ *
More information about the grass-commit
mailing list