unittests_register.py 13 KB

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