Browse Source

v.what.strds: add capabilities to use names also for temporal dataset with minutes and seconds granularity

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@69331 15284696-431f-4ddb-bdfa-cd5b030d7da7
Luca Delucchi 8 years ago
parent
commit
d47ec42baf
1 changed files with 16 additions and 7 deletions
  1. 16 7
      scripts/v.what.strds/v.what.strds.py

+ 16 - 7
scripts/v.what.strds/v.what.strds.py

@@ -62,7 +62,7 @@ from grass.exceptions import CalledModuleError
 class Sample(object):
 
     def __init__(self, start=None, end=None, raster_names=None,
-                 strds_name=None):
+                 strds_name=None, granularity=None):
         self.start = start
         self.end = end
         if raster_names is not None:
@@ -70,6 +70,7 @@ class Sample(object):
         else:
             self.raster_names = []
         self.strds_name = strds_name
+        self.granu = granularity
 
     def __str__(self):
         return "Start: %s\nEnd: %s\nNames: %s\n" % (str(self.start),
@@ -77,13 +78,18 @@ class Sample(object):
                                                     str(self.raster_names))
 
     def printDay(self, date='start'):
+        output = ''
         if date == 'start':
-            return str(self.start).split(' ')[0].replace('-', '_')
+            output = str(self.start).split(' ')[0].replace('-', '_')
         elif date == 'end':
-            return str(self.end).split(' ')[0].replace('-', '_')
+            output = str(self.end).split(' ')[0].replace('-', '_')
         else:
             grass.fatal("The values accepted by printDay in Sample are:"
                         " 'start', 'end'")
+        if self.granu:
+            if self.granu.find('minute') != -1 or self.granu.find('second') != -1:
+                output += '_' + str(self.start).split(' ')[1].replace(':', '_')
+        return output
 
 ############################################################################
 
@@ -127,6 +133,7 @@ def main():
     first_strds = tgis.open_old_stds(strds_names[0], "strds", dbif)
     # Single space time raster dataset
     if len(strds_names) == 1:
+        granu = first_strds.get_granularity()
         rows = first_strds.get_registered_maps("name,mapset,start_time,end_time",
                                                tempwhere, "start_time",
                                                dbif)
@@ -135,13 +142,12 @@ def main():
             dbif.close()
             grass.fatal(_("Space time raster dataset <%s> is empty") %
                         first_strds.get_id())
-
         for row in rows:
             start = row["start_time"]
             end = row["end_time"]
             raster_maps = [row["name"] + "@" + row["mapset"], ]
 
-            s = Sample(start, end, raster_maps, first_strds.get_name())
+            s = Sample(start, end, raster_maps, first_strds.get_name(), granu)
             samples.append(s)
     else:
         # Multiple space time raster datasets
@@ -162,7 +168,7 @@ def main():
                                                         False, None,
                                                         "equal", False,
                                                         False)
-
+        #TODO check granularity for multiple STRDS
         for i in range(len(mapmatrizes[0])):
             isvalid = True
             mapname_list = []
@@ -205,11 +211,14 @@ def main():
 
     if len(pymap.dblinks) == 0:
         try:
+            pymap.close()
             grass.run_command("v.db.addtable", map=output)
         except CalledModuleError:
             dbif.close()
             grass.fatal(_("Unable to add table <%s> to vector map <%s>" % output))
-    pymap.close()
+    if pymap.is_open():
+        pymap.close()
+
     for sample in samples:
         raster_names = sample.raster_names
         # Call v.what.rast for each raster map