Explorar o código

Convert v.dissolve to Python

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@33552 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements %!s(int64=16) %!d(string=hai) anos
pai
achega
e22d15f10d
Modificáronse 1 ficheiros con 118 adicións e 0 borrados
  1. 118 0
      scripts/v.dissolve/v.dissolve.py

+ 118 - 0
scripts/v.dissolve/v.dissolve.py

@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+############################################################################
+#
+# MODULE:       v.dissolve
+# AUTHOR:       M. Hamish Bowman, Dept. Marine Science, Otago Univeristy,
+#                 New Zealand
+#               Markus Neteler for column support
+#               Converted to Python by Glynn Clements
+# PURPOSE:      Dissolve common boundaries between areas with common cat
+#                 (frontend to v.extract -d)
+# COPYRIGHT:    (c) 2006 Hamish Bowman, and 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.
+#
+#############################################################################
+
+#%Module
+#% description: Dissolves boundaries between adjacent areas sharing a common category number or attribute.
+#% keywords: vector, area, dissolve
+#%End
+#%option
+#% key: input
+#% type: string
+#% gisprompt: old,vector,vector
+#% key_desc: name
+#% description: Name of input vector map 
+#% required: yes
+#%end
+#%option
+#% key: output
+#% type: string
+#% gisprompt: new,vector,vector
+#% key_desc: name
+#% description: Name for output vector map
+#% required: yes
+#%end
+#%option
+#% key: layer
+#% type: integer
+#% description: Layer number. If -1, all layers are extracted
+#% answer: 1
+#% required : no
+#%end
+#%option
+#% key: column
+#% type: string
+#% description: Name of column used to dissolve common boundaries
+#% required : no
+#%end
+
+import sys
+import os
+import grass
+import atexit
+
+def cleanup():
+    nuldev = file(os.devnull, 'w')
+    grass.run_command('g.remove', vect = '%s_%s' % (output, tmp), quiet = True, stderr = nuldev)
+
+def main():
+    global output, tmp
+
+    input = options['input']
+    output = options['output']
+    layer = options['layer']
+    column = options['column']
+
+    # save command line
+    cmdline = os.path.basename(sys.argv[0])
+    cmdline += ' input=' + input
+    cmdline += ' output=' + output
+    if layer:
+	cmdline += ' layer=' + layer
+    if column:
+	cmdline += ' column=' + column
+
+    #### setup temporary file
+    tmp = str(os.getpid())
+
+    # does map exist?
+    if not grass.find_file(input, element = 'vector')['file']:
+	grass.fatal("Vector map '$GIS_OPT_INPUT' not found in mapset search path")
+
+    if not column:
+	grass.run_command('v.extract', flags = 'd', input = input,
+			  output = output, type = 'area', layer = layer)
+    else:
+	coltype = ''
+	s = grass.read_command('v.info', flags = 'c', map = input, quiet = True)
+	for line in s.splitlines():
+	    f = line.split('|')
+	    if len(f) > 1 and f[1] == column:
+		coltype = f[0]
+
+	if coltype not in ['INTEGER', 'CHARACTER']:
+	    grass.fatal("Key column must be of type integer or string")
+
+	s = grass.read_command('v.db.connect', flags = 'g', map = input, layer = layer)
+	table = s.split()[1]
+	if not table:
+	    grass.fatal("There is no table connected to this map")
+
+	tmpfile = '%s_%s' % (output, tmp)
+
+	grass.run_command('v.reclass', input = input, output = tmpfile,
+			  layer = layer, column = column)
+
+	grass.run_command('v.extract', flags = 'd', input = tmpfile,
+			  output = output, type = 'area', layer = layer)
+
+    # write cmd history:
+    grass.run_command('v.support', map = output, cmdhist = cmdline)
+
+if __name__ == "__main__":
+    options, flags = grass.parser()
+    atexit.register(cleanup)
+    main()