[GRASS-SVN] r33551 - grass/trunk/scripts/v.in.e00
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Sep 25 17:29:02 EDT 2008
Author: glynn
Date: 2008-09-25 17:29:02 -0400 (Thu, 25 Sep 2008)
New Revision: 33551
Added:
grass/trunk/scripts/v.in.e00/v.in.e00.py
Log:
Convert v.in.e00 to Python (untested; I don't have any .e00 files)
Added: grass/trunk/scripts/v.in.e00/v.in.e00.py
===================================================================
--- grass/trunk/scripts/v.in.e00/v.in.e00.py (rev 0)
+++ grass/trunk/scripts/v.in.e00/v.in.e00.py 2008-09-25 21:29:02 UTC (rev 33551)
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+
+############################################################################
+#
+# MODULE: v.in.e00
+#
+# AUTHOR(S): Markus Neteler, Otto Dassau
+# Converted to Python by Glynn Clements
+#
+# PURPOSE: Import E00 data into a GRASS vector map
+# Imports single and split E00 files (.e00, .e01, .e02 ...)
+#
+# COPYRIGHT: (c) 2004, 2005 GDF Hannover bR, http://www.gdf-hannover.de
+#
+# This program is free software under the GNU General Public
+# License (>=v2). Read the file COPYING that comes with GRASS
+# for details.
+#
+#############################################################################
+#
+# REQUIREMENTS:
+# - avcimport: http://avce00.maptools.org
+
+#%Module
+#% description: Import E00 file into a vector map.
+#% keywords: vector, import
+#%End
+#%flag
+#% key: v
+#% description: Verbose mode
+#%end
+#%option
+#% key: file
+#% type: string
+#% description: E00 file
+#% gisprompt: old_file,file,input
+#% required : yes
+#%end
+#%option
+#% key: type
+#% type: string
+#% options: point,line,area
+#% description: Input type point, line or area
+#% required : yes
+#%end
+#%option
+#% key: vect
+#% type: string
+#% gisprompt: new,vector,vector
+#% description: Name for output vector map
+#% required : no
+#%end
+
+import sys
+import os
+import grass
+import shutil
+import subprocess
+
+def find_program(pgm):
+ nuldev = file(os.devnull, 'w+')
+ try:
+ subprocess.call([pgm], stdin = nuldev, stdout = nuldev, stderr = nuldev)
+ found = True
+ except:
+ found = False
+ nuldev.close()
+ return found
+
+def main():
+
+ filename = options['file']
+ type = options['type']
+ vect = options['vect']
+
+ # save command line
+ cmdline = os.path.basename(sys.argv[0])
+ cmdline += ' file=' + filename
+ cmdline += ' type=' + type
+ if vect:
+ cmdline += ' vect=' + vect
+
+ e00tmp = str(os.getpid())
+
+ #### check for avcimport
+ if not find_program('avcimport'):
+ grass.fatal("'avcimport' program not found, install it first" +
+ "\n" +
+ "http://avce00.maptools.org")
+
+ #### check for e00conv
+ if not find_program('e00conv'):
+ grass.fatal("'e00conv' program not found, install it first" +
+ "\n" +
+ "http://avce00.maptools.org")
+
+ # check that the user didn't use all three, which gets past the parser.
+ if type not in ['point','line','area']:
+ grass.fatal('Must specify one of "point", "line", or "area".')
+
+ e00name = os.path.basename(filename)
+ fs = os.path.splitext(e00name)
+ if fs[1].lower() == '.e00':
+ e00name = fs[0]
+ # avcimport only accepts 13 chars:
+ e00shortname = e00name[:13]
+
+ #check if this is a split E00 file (.e01, .e02 ...):
+ merging = False
+ if os.path.exists(e00name + '.e01') or os.path.exists(e00name + '.E01'):
+ grass.message("Found that E00 file is split into pieces (.e01, ...). Merging...")
+ merging = True
+
+ if vect:
+ name = vect
+ else:
+ name = e00name
+
+ ### do import
+
+ #make a temporary directory
+ tmpdir = grass.tempfile()
+ try:
+ os.remove(tmpdir)
+ except:
+ pass
+ os.mkdir(tmpdir)
+
+ for f in glob(e00name + '.e*') + glob(e00name + '.E*'):
+ shutil.copy(f, tmpdir)
+
+ #change to temporary directory to later avoid removal problems (rm -r ...)
+ os.chdir(tmpdir)
+
+ #check for binay E00 file (we can just check if import fails):
+ #avcimport doesn't set exist status :-(
+
+ if merging:
+ files = glob(e00name + '.e*') + glob(e00name + '.E*')
+ files.sort()
+ filename = "%s.cat.%s.e00" % (e00name, e00tmp)
+ outf = file(filename, 'wb')
+ for f in files:
+ inf = file(f, 'rb')
+ shutil.copyfileobj(inf, outf)
+ inf.close()
+ outf.close()
+
+ nuldev = file(os.devnull, 'w+')
+
+ grass.message("An error may appear next which will be ignored...")
+ if subprocess.call(['avcimport', filename, e00shortname], stdout = nuldev, stderr = nuldev) == 1:
+ grass.message("E00 ASCII found and converted to Arc Coverage in current directory")
+ else:
+ grass.message("E00 Compressed ASCII found. Will uncompress first...")
+ try:
+ os.remove(e00shortname)
+ os.remove(info)
+ except:
+ pass
+ subprocess.call(['e00conv', filename, e00tmp + '.e00'])
+ grass.message("...converted to Arc Coverage in current directory")
+ subprocess.call(['avcimport', e00tmp + '.e00', e00shortname], stderr = nuldev)
+
+ #SQL name fix:
+ name = name.replace('-', '_')
+
+ ## let's import...
+ grass.message("Importing %ss..." % type)
+
+ layer = dict(point = 'LAB', line = 'ARC', area = ['LAB','ARC'])
+ itype = dict(point = 'point', line = 'line', area = 'centroid')
+
+ if grass.run_command('v.in.ogr', flags = 'o', dsn = e00shortname,
+ layer = layer[type], type = intype[type],
+ output = name) != 0:
+ grass.fatal("An error occurred while running v.in.ogr")
+
+ grass.message("Imported <%s> vector map <%s>." % (type, name))
+
+ #### clean up the mess
+ for root, dirs, files in os.walk('.', False):
+ for f in files:
+ path = os.path.join(root, f)
+ try:
+ os.remove(path)
+ except:
+ pass
+ for d in dirs:
+ path = os.path.join(root, d)
+ try:
+ os.rmdir(path)
+ except:
+ pass
+
+ os.chdir('..')
+ os.rmdir(tmpdir)
+
+ #### end
+ grass.message("Done.")
+
+ # write cmd history:
+ grass.run_command('v.support', map = name, cmdhist = cmdline)
+
+if __name__ == "__main__":
+ options, flags = grass.parser()
+ main()
+
Property changes on: grass/trunk/scripts/v.in.e00/v.in.e00.py
___________________________________________________________________
Name: svn:executable
+ *
More information about the grass-commit
mailing list