unittests_register.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. """!Unit test to register raster maps with absolute and relative
  2. time using tgis.register_maps_in_space_time_dataset()
  3. (C) 2013 by the GRASS Development Team
  4. This program is free software under the GNU General Public
  5. License (>=v2). Read the file COPYING that comes with GRASS
  6. for details.
  7. @author Soeren Gebbert
  8. """
  9. import grass.script as grass
  10. import grass.temporal as tgis
  11. import gunittest
  12. import datetime
  13. class TestRegisterFunctions(gunittest.TestCase):
  14. @classmethod
  15. def setUpClass(cls):
  16. """!Initiate the temporal GIS and set the region
  17. """
  18. # Use always the current mapset as temporal database
  19. grass.run_command("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
  20. tgis.init()
  21. grass.overwrite = True
  22. grass.use_temp_region()
  23. grass.run_command("g.region", n=80.0, s=0.0, e=120.0,
  24. w=0.0, t=1.0, b=0.0, res=10.0)
  25. def setUp(self):
  26. """!Create the test maps and the space time raster datasets
  27. """
  28. self.assertModule("r.mapcalc", overwrite=True, quiet=True,
  29. expression="register_map_1 = 1")
  30. self.assertModule("r.mapcalc", overwrite=True, quiet=True,
  31. expression="register_map_2 = 2")
  32. self.strds_abs = tgis.open_new_stds(name="register_test_abs", type="strds", temporaltype="absolute",
  33. title="Test strds", descr="Test strds", semantic="field")
  34. self.strds_rel = tgis.open_new_stds(name="register_test_rel", type="strds", temporaltype="relative",
  35. title="Test strds", descr="Test strds", semantic="field")
  36. def test_absolute_time_strds_1(self):
  37. """!Test the registration of maps with absolute time in a
  38. space time raster dataset
  39. """
  40. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(),
  41. maps="register_map_1,register_map_2",
  42. start="2001-01-01", increment="1 day", interval=True)
  43. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  44. map.select()
  45. start, end = map.get_absolute_time()
  46. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  47. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  48. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  49. map.select()
  50. start, end = map.get_absolute_time()
  51. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  52. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  53. self.strds_abs.select()
  54. start, end = self.strds_abs.get_absolute_time()
  55. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  56. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  57. def test_absolute_time_strds_2(self):
  58. """!Test the registration of maps with absolute time in a
  59. space time raster dataset.
  60. The timestamps are set using the C-Interface beforehand, so that the register function needs
  61. to read the timetsamp from the map metadata.
  62. """
  63. ciface = tgis.get_tgis_c_library_interface()
  64. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001/2 Jan 2001")
  65. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "2 Jan 2001/3 Jan 2001")
  66. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(),
  67. maps="register_map_1,register_map_2")
  68. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  69. map.select()
  70. start, end = map.get_absolute_time()
  71. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  72. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  73. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  74. map.select()
  75. start, end = map.get_absolute_time()
  76. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  77. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  78. self.strds_abs.select()
  79. start, end = self.strds_abs.get_absolute_time()
  80. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  81. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  82. def test_absolute_time_1(self):
  83. """!Test the registration of maps with absolute time
  84. """
  85. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  86. maps="register_map_1,register_map_2",
  87. start="2001-01-01", increment="1 day", interval=True)
  88. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  89. map.select()
  90. start, end = map.get_absolute_time()
  91. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  92. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  93. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  94. map.select()
  95. start, end = map.get_absolute_time()
  96. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  97. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  98. def test_absolute_time_2(self):
  99. """!Test the registration of maps with absolute time
  100. """
  101. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  102. maps="register_map_1,register_map_2",
  103. start="2001-01-01 10:30:01", increment="8 hours", interval=False)
  104. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  105. map.select()
  106. start, end = map.get_absolute_time()
  107. self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
  108. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  109. map.select()
  110. start, end = map.get_absolute_time()
  111. self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
  112. def test_absolute_time_3(self):
  113. """!Test the registration of maps with absolute time.
  114. The timestamps are set using the C-Interface beforehand, so that the register function needs
  115. to read the timetsamp from the map metadata.
  116. """
  117. ciface = tgis.get_tgis_c_library_interface()
  118. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001 10:30:01")
  119. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1 Jan 2001 18:30:01")
  120. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  121. maps="register_map_1,register_map_2")
  122. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  123. map.select()
  124. start, end = map.get_absolute_time()
  125. self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
  126. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  127. map.select()
  128. start, end = map.get_absolute_time()
  129. self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
  130. def test_relative_time_strds_1(self):
  131. """!Test the registration of maps with relative time in a
  132. space time raster dataset
  133. """
  134. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(),
  135. maps="register_map_1,register_map_2", start=0,
  136. increment=1, unit="day", interval=True)
  137. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  138. map.select()
  139. start, end, unit = map.get_relative_time()
  140. self.assertEqual(start, 0)
  141. self.assertEqual(end, 1)
  142. self.assertEqual(unit, "day")
  143. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  144. map.select()
  145. start, end, unit = map.get_relative_time()
  146. self.assertEqual(start, 1)
  147. self.assertEqual(end, 2)
  148. self.assertEqual(unit, "day")
  149. self.strds_rel.select()
  150. start, end, unit = self.strds_rel.get_relative_time()
  151. self.assertEqual(start, 0)
  152. self.assertEqual(end, 2)
  153. self.assertEqual(unit, "day")
  154. def test_relative_time_strds_2(self):
  155. """!Test the registration of maps with relative time in a
  156. space time raster dataset. The timetsamps are set for the maps using the
  157. C-interface before registration.
  158. """
  159. ciface = tgis.get_tgis_c_library_interface()
  160. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
  161. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
  162. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(),
  163. maps="register_map_1,register_map_2")
  164. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  165. map.select()
  166. start, end, unit = map.get_relative_time()
  167. self.assertEqual(start, 1000000)
  168. self.assertEqual(end, 1500000)
  169. self.assertEqual(unit, "seconds")
  170. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  171. map.select()
  172. start, end, unit = map.get_relative_time()
  173. self.assertEqual(start, 1500000)
  174. self.assertEqual(end, 2000000)
  175. self.assertEqual(unit, "seconds")
  176. self.strds_rel.select()
  177. start, end, unit = self.strds_rel.get_relative_time()
  178. self.assertEqual(start, 1000000)
  179. self.assertEqual(end, 2000000)
  180. self.assertEqual(unit, "seconds")
  181. def test_relative_time_1(self):
  182. """!Test the registration of maps with relative time
  183. """
  184. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  185. maps="register_map_1,register_map_2",
  186. start=0, increment=1, unit="day", interval=True)
  187. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  188. map.select()
  189. start, end, unit = map.get_relative_time()
  190. self.assertEqual(start, 0)
  191. self.assertEqual(end, 1)
  192. self.assertEqual(unit, "day")
  193. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  194. map.select()
  195. start, end, unit = map.get_relative_time()
  196. self.assertEqual(start, 1)
  197. self.assertEqual(end, 2)
  198. self.assertEqual(unit, "day")
  199. def test_relative_time_2(self):
  200. """!Test the registration of maps with relative time
  201. """
  202. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  203. maps="register_map_1,register_map_2",
  204. start=1000000, increment=500000, unit="seconds", interval=True)
  205. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  206. map.select()
  207. start, end, unit = map.get_relative_time()
  208. self.assertEqual(start, 1000000)
  209. self.assertEqual(end, 1500000)
  210. self.assertEqual(unit, "seconds")
  211. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  212. map.select()
  213. start, end, unit = map.get_relative_time()
  214. self.assertEqual(start, 1500000)
  215. self.assertEqual(end, 2000000)
  216. self.assertEqual(unit, "seconds")
  217. def test_relative_time_3(self):
  218. """!Test the registration of maps with relative time. The timetsamps are set beforhand using
  219. the C-interface.
  220. """
  221. ciface = tgis.get_tgis_c_library_interface()
  222. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
  223. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
  224. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  225. maps="register_map_1,register_map_2")
  226. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  227. map.select()
  228. start, end, unit = map.get_relative_time()
  229. self.assertEqual(start, 1000000)
  230. self.assertEqual(end, 1500000)
  231. self.assertEqual(unit, "seconds")
  232. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  233. map.select()
  234. start, end, unit = map.get_relative_time()
  235. self.assertEqual(start, 1500000)
  236. self.assertEqual(end, 2000000)
  237. self.assertEqual(unit, "seconds")
  238. def tearDown(self):
  239. """!Remove maps from temporal database
  240. """
  241. self.assertModule("t.unregister", maps="register_map_1,register_map_2", quiet=True)
  242. self.assertModule("g.remove", rast="register_map_1,register_map_2", quiet=True)
  243. self.strds_abs.delete()
  244. self.strds_rel.delete()
  245. @classmethod
  246. def tearDownClass(cls):
  247. """!Remove the temporary region
  248. """
  249. grass.del_temp_region()
  250. if __name__ == '__main__':
  251. gunittest.test()