Pārlūkot izejas kodu

Fixed Bug https://trac.osgeo.org/grass/ticket/3223 wong time stamp for raster map in case where condition was used.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@72479 15284696-431f-4ddb-bdfa-cd5b030d7da7
Soeren Gebbert 7 gadi atpakaļ
vecāks
revīzija
1513c3266f

+ 19 - 1
temporal/t.rast.series/t.rast.series.py

@@ -132,6 +132,7 @@ def main():
             grass.fatal(_("%s failed. Check above error messages.") % 'r.series')
 
         if not add_time:
+
             # Create the time range for the output map
             if output.find("@") >= 0:
                 id = output
@@ -141,7 +142,24 @@ def main():
 
             map = sp.get_new_map_instance(id)
             map.load()
-            map.set_temporal_extent(sp.get_temporal_extent())
+
+            # We need to set the temporal extent from the subset of selected maps
+            maps = sp.get_registered_maps_as_objects(where=where, order=order, dbif=None)
+            first_map = maps[0]
+            last_map = maps[-1]
+            start_a, end_a = first_map.get_temporal_extent_as_tuple()
+            start_b, end_b = last_map.get_temporal_extent_as_tuple()
+
+            if end_b is None:
+                end_b = start_b
+
+            if first_map.is_time_absolute():
+                extent = tgis.AbsoluteTemporalExtent(start_time=start_a, end_time=end_b)
+            else:
+                extent = tgis.RelativeTemporalExtent(start_time=start_a, end_time=end_b,
+                                                     unit=first_map.get_relative_time_unit())
+
+            map.set_temporal_extent(extent=extent)
 
             # Register the map in the temporal database
             if map.is_in_db():

+ 28 - 0
temporal/t.rast.series/test_t.sereis_bug_3223.sh

@@ -0,0 +1,28 @@
+#/bin/bash
+# Test bug #3223
+export GRASS_OVERWRITE=1
+g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10 res3=10 -p3
+
+r.mapcalc expression="prec_1 = 100" --o
+r.mapcalc expression="prec_2 = 200" --o
+r.mapcalc expression="prec_3 = 300" --o
+r.mapcalc expression="prec_4 = 400" --o
+r.mapcalc expression="prec_5 = 500" --o
+r.mapcalc expression="prec_6 = 600" --o
+
+t.create type=strds temporaltype=absolute \
+    output=precip_abs title="Example" \
+    descr="Example" --o
+
+t.register -i type=raster input=precip_abs \
+    maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 \
+    start="2001-01-01" increment="1 months" --o
+
+t.rast.series input=precip_abs output=precip_abs_average
+
+r.info precip_abs_average
+
+t.rast.series input=precip_abs output=precip_abs_average_3months where="start_time >= '2001-04-01'"
+
+r.info precip_abs_average_3months
+

+ 19 - 4
temporal/t.rast.series/testsuite/test_series.py

@@ -35,22 +35,35 @@ class TestSnapAbsoluteSTRDS(TestCase):
                                     description="A test",  overwrite=True)
 
         cls.runModule("t.register", type="raster",  input="A",
-                                     maps="a1,a2,a3,a4",
-                                     start="2001-01-01",
-                                     increment="1 month",
-                                     overwrite=True)
+                                    maps="a1,a2,a3,a4",
+                                    start="2001-01-01",
+                                    increment="1 month",
+                                    flags="i",
+                                    overwrite=True)
     @classmethod
     def tearDownClass(cls):
         """Remove the temporary region
         """
         cls.del_temp_region()
         cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        cls.runModule("t.unregister", type="raster",
+                      maps="series_average,series_maximum,series_minimum,series_minimum_2")
         cls.runModule("g.remove", flags="f", type="raster", name="series_average")
         cls.runModule("g.remove", flags="f", type="raster", name="series_maximum")
         cls.runModule("g.remove", flags="f", type="raster", name="series_minimum")
         cls.runModule("g.remove", flags="f", type="raster", name="series_minimum_2")
         cls.runModule("g.remove", flags="f", type="raster", name="series_quantile")
 
+    def test_time_stamp(self):
+        self.assertModule("t.rast.series", input="A", method="average",
+                          output="series_time_stamp", where="start_time > '2001-02-01'")
+
+        tinfo_string="""start_time=2001-02-01 00:00:00
+                        end_time=2001-05-01 00:00:00"""
+
+        info = SimpleModule("t.info", flags="g", type="raster", input="series_time_stamp")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
     def test_average(self):
         self.assertModule("t.rast.series", input="A", method="average",
                           output="series_average")
@@ -119,6 +132,8 @@ class TestSnapRelativeSTRDS(TestCase):
         """
         cls.del_temp_region()
         cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        cls.runModule("t.unregister", type="raster",
+                      maps="series_average,series_maximum,series_minimum,series_minimum_2")
         cls.runModule("g.remove", flags="f", type="raster", name="series_average")
         cls.runModule("g.remove", flags="f", type="raster", name="series_maximum")
         cls.runModule("g.remove", flags="f", type="raster", name="series_minimum")