[GRASS-SVN] r61923 - grass-addons/grass7/vector/v.to.lines

svn_grass at osgeo.org svn_grass at osgeo.org
Sat Sep 13 15:37:19 PDT 2014


Author: lucadelu
Date: 2014-09-13 15:37:19 -0700 (Sat, 13 Sep 2014)
New Revision: 61923

Modified:
   grass-addons/grass7/vector/v.to.lines/v.to.lines.py
Log:
v.to.lines: fix bugs, points to lines works now; add method for points to lines function

Modified: grass-addons/grass7/vector/v.to.lines/v.to.lines.py
===================================================================
--- grass-addons/grass7/vector/v.to.lines/v.to.lines.py	2014-09-13 21:59:55 UTC (rev 61922)
+++ grass-addons/grass7/vector/v.to.lines/v.to.lines.py	2014-09-13 22:37:19 UTC (rev 61923)
@@ -28,15 +28,28 @@
 #%option G_OPT_V_OUTPUT
 #%end
 
+#%option
+#% key: method
+#% type: string
+#% description: Method used for point interpolation
+#% options: delaunay
+#% answer: delaunay
+#% guisection: Area
+#%end
+
 import grass.script as grass
-import os, sys
+import os
+import sys
 
 
 def main():
     # Get the options
     input = options["input"]
     output = options["output"]
-
+    method = options["method"]
+    min_cat = None
+    max_cat = None
+    point = None
     overwrite = grass.overwrite()
 
     quiet = True
@@ -47,19 +60,28 @@
     in_info = grass.vector_info(input)
     # check for wild mixture of vector types
     if in_info['points'] > 0 and in_info['boundaries'] > 0:
-        grass.fatal(_("The input vector map contains both polygons and points, cannot handle mixed types"))
+        grass.fatal(_("The input vector map contains both polygons and points,"
+                      " cannot handle mixed types"))
 
+    pid = os.getpid()
     # process points via triangulation, then exit
     if in_info['points'] > 0:
-        layer=1 # hardcoded for now
-        grass.message(_("Processing point data (%d points found)...") % in_info['points'])
-        grass.run_command('v.delaunay', input=input, layer=layer, output=output)
-        sys.exit()
+        point = True
+        layer = 1  # hardcoded for now
+        out_temp = '{inp}_point_tmp_{pid}'.format(inp=input, pid=pid)
+        if method == 'delaunay':
+            grass.message(_("Processing point data (%d points found)...") % in_info['points'])
+            grass.run_command('v.delaunay', input=input, layer=layer,
+                              output=out_temp, quiet=quiet)
 
+        grass.run_command('v.db.addtable', map=out_temp, quiet=True)
+        input = out_temp
+        in_info = grass.vector_info(input)
+
     # process areas
     if in_info['areas'] == 0 and in_info['boundaries'] == 0:
         grass.fatal(_("The input vector map does not contain polygons"))
-    pid = os.getpid()
+
     out_type = '{inp}_type_{pid}'.format(inp=input, pid=pid)
     input_tmp = '{inp}_tmp_{pid}'.format(inp=input, pid=pid)
     remove_names = "%s,%s" % (out_type, input_tmp)
@@ -79,8 +101,8 @@
         grass.run_command('g.remove', vect=input_tmp, quiet=quiet)
         grass.fatal(_("Error populating new table for layer 2"))
 
-    if 0 != grass.run_command('v.type', input=input_tmp, output=out_type, \
-                              from_type='boundary', to_type='line', \
+    if 0 != grass.run_command('v.type', input=input_tmp, output=out_type,
+                              from_type='boundary', to_type='line',
                               quiet=quiet, layer="2"):
         grass.run_command('g.remove', vect=remove_names, quiet=quiet)
         grass.fatal(_("Error converting polygon to line"))
@@ -91,22 +113,28 @@
             min_cat = report[0].split()[-2]
             max_cat = report[0].split()[-1]
             break
-    if 0 != grass.run_command('v.edit', map=out_type, tool='delete', \
-                              type='centroid', layer=2, quiet=quiet, \
-                              cats='{mi}-{ma}'.format(mi=min_cat, ma=max_cat)):
-        grass.run_command('g.remove', vect=remove_names, quiet=quiet)
-        grass.fatal(_("Error removing centroids"))
+    if min_cat and max_cat:
+        if 0 != grass.run_command('v.edit', map=out_type, tool='delete',
+                                  type='centroid', layer=2, quiet=quiet,
+                                  cats='{mi}-{ma}'.format(mi=min_cat, ma=max_cat)):
+            grass.run_command('g.remove', vect=remove_names, quiet=quiet)
+            grass.fatal(_("Error removing centroids"))
 
-    if 0 != grass.run_command('v.db.droptable', map=out_type, layer=1,
-                              flags='f', quiet=quiet):
-        grass.run_command('g.remove', vect=remove_names, quiet=quiet)
-        grass.fatal(_("Error removing table from layer 1"))
+    try:
+        if 0 != grass.run_command('v.db.droptable', map=out_type, layer=1,
+                                  flags='f', quiet=True):
+            grass.run_command('g.remove', vect=remove_names, quiet=quiet)
+            grass.fatal(_("Error removing table from layer 1"))
+    except:
+        grass.warning(_("No table for layer %d" % 1))
     if 0 != grass.run_command('v.category', input=out_type, option='transfer',
                               output=output, layer="2,1", quiet=quiet,
                               overwrite=overwrite):
         grass.run_command('g.remove', vect=remove_names, quiet=quiet)
         grass.fatal(_("Error adding categories"))
     grass.run_command('g.remove', vect=remove_names, quiet=quiet)
+    if point:
+        grass.run_command('g.remove', vect=out_temp, quiet=quiet)
 
 if __name__ == "__main__":
     options, flags = grass.parser()



More information about the grass-commit mailing list